实现viewpager下的圆点滑动

在Drawable目录下创建资源文件 使用shape标签画出背景圆点与当前圆点

背景圆点:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval" >

    <solid android:color="@android:color/darker_gray" />

</shape>当前圆点:
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval" >

    <solid android:color="#f00" />

</shape>布局界面:
LinearLayout:用来在代码中添加背景点
<RelativeLayout    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_alignParentBottom="true"    android:layout_alignParentRight="true"    android:layout_marginBottom="20dp" >

    <LinearLayout        android:id="@+id/ll_point_group"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="horizontal" >    </LinearLayout>

    <View        android:id="@+id/view_red_point"        android:layout_width="10dp"        android:layout_height="10dp"        android:background="@drawable/shape_point_red" /></RelativeLayout>

代码中:先画背景点:
for (int i = 0; i < list_photo.size(); i++) {    View point = new View(this);    point.setBackgroundResource(R.drawable.shape_point_gray);// 设置引导页默认圆点

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(            DensityUtils.dp2px(this, 10), DensityUtils.dp2px(this, 10));    if (i > 0) {        params.leftMargin = DensityUtils.dp2px(this, 10);// 设置圆点间隔    }

    point.setLayoutParams(params);// 设置圆点的大小

    ll_point_group.addView(point);// 将圆点添加给线性布局}

// 获取视图树, 对layout结束事件进行监听ll_point_group.getViewTreeObserver().addOnGlobalLayoutListener(        new ViewTreeObserver.OnGlobalLayoutListener() {

            // 当layout执行结束后回调此方法            @Override            public void onGlobalLayout() {                System.out.println("layout 结束");                ll_point_group.getViewTreeObserver()                        .removeGlobalOnLayoutListener(this);                mPointWidth = ll_point_group.getChildAt(1).getLeft()                        - ll_point_group.getChildAt(0).getLeft();                System.out.println("圆点距离:" + mPointWidth);            }        });对图片使用点击事件的监听避免点击后不会循环播放
class MyTouchListener implements View.OnTouchListener {

    @Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                System.out.println("按下");                mHandler.removeCallbacksAndMessages(null);// 删除Handler中的所有消息                break;            case MotionEvent.ACTION_CANCEL:                System.out.println("事件取消");                mHandler.sendEmptyMessageDelayed(0, 3000);                break;            case MotionEvent.ACTION_UP:                System.out.println("抬起");                mHandler.sendEmptyMessageDelayed(0, 3000);                break;

            default:                break;        }

        return true;    }}重写viewpager的滑动事件实时改变红点的位置
class MyPageListener implements ViewPager.OnPageChangeListener {

    // 滑动事件    @Override    public void onPageScrolled(int position, float positionOffset,                               int positionOffsetPixels) {        // System.out.println("当前位置:" + position + ";百分比:" + positionOffset        // + ";移动距离:" + positionOffsetPixels);        int len = (int) (mPointWidth * positionOffset) + position                * mPointWidth;        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewRedPoint                .getLayoutParams();// 获取当前红点的布局参数        params.leftMargin = len;// 设置左边距

        viewRedPoint.setLayoutParams(params);// 重新给小红点设置布局参数    }定时循环播放viewpager的图片
// 自动轮播条显示if (mHandler == null) {    mHandler = new Handler() {        public void handleMessage(android.os.Message msg) {            int currentItem = viewPager.getCurrentItem();

            if (currentItem < list_photo.size() - 1) {                currentItem++;            } else {                currentItem = 0;            }

            viewPager.setCurrentItem(currentItem);// 切换到下一个页面            mHandler.sendEmptyMessageDelayed(0, 3000);// 继续延时3秒发消息,            // 形成循环        };    };

    mHandler.sendEmptyMessageDelayed(0, 3000);// 延时3秒后发消息}
时间: 2024-12-13 19:58:16

实现viewpager下的圆点滑动的相关文章

Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换

上一篇博文我们介绍了利用ViewPager和Fragment实现顶部滑块左右滑动效果,具体参考(http://blog.csdn.net/a123demi/article/details/39480385). 而本篇博文将实例讲解利用ViewPager实现底部圆点导航左右滑动效果,以及被滑动界面实现监听事件,同时通过Fragment实现页面的切换. 对于该效果的实现,需要实现以下几个问题: 1. 底部圆点加载和实现方法? 2. 怎样实现左右滑动效果? 3. 被滑动页面,怎样实现监听事件? 4.

Android使用ViewPager实现左右循环滑动及轮播效果

ViewPager是一个常用的android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其他页面的信息. 为此我查阅了网络上现有的一些关于实现这样效果的例子,但都不是很满意,经过反复实验,在这里总结并分享给大家,希望能有所帮助. 循环滑动效果的实现:PagerAdap

ViewPager+Fragmet 实现3D滑动效果

ViewPager+Fragmet 实现3D滑动效果,下面给出程序运行截图: 本项目的目录截图如下: 核心代码如:fragments包里的碎片fragment,和util包里面的对ViewPager的一些定义. dome源码下载地址:(http://download.csdn.net/detail/qq_30000411/9582958) 本dome是基于as2.0下写的项目,下载后导入运行有可能会出现sdk版本问题,希望你能自习该版本bug,as的项目的apk路径 ViewPage+Fragm

ViewPager(下)--利用Fragment实现漂亮的页面切换

之前用的ViewPager适用于简单的广告切换,但实现页面间的切换最好是用官方推荐的Fragment来处理. 本人力争做到最简单.最实用,是想以后用到的时候可以方便的拿过来复制就可以了. 效果图:          功能:可点击按钮切换页面,也可滑动界面切换页面. 文件:java文件5个.xml文件4个..9图片4张 java主类: <span style="font-size:12px;">package com.example.viewpageractivity; im

Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)

1) ViewPager提供了左右滑动切换页面的方法,但是它所提供的标题只是无语,估计没有真正的项目会照搬拿过来;并且它只能一页一页滑,我想直接查看最后一页要滑半天; 2) 看了腾讯新闻客户端感觉体验很好,所以就仿着写了,因为只是做个demo供大家交流也是给自己做个笔记,所以功能实现就行demo比较简单; 3) 有兴趣的可以在demo的基础拓展,如果哪里写得不好还望大家多多赐教.一起交流 4) 直接上主要代码,所以注释都写在代码里,最后会给工程包.(PS是在AS环境下生成的) 先放个效果图: M

ViewFlipper 在同一背景下 页面左右滑动

<ViewFlipper android:id="@+id/ViewFlipper1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:inAnimation="@anim/push_left_in" android:outAnimation="@anim/push_left_out" >

Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)

上一段时间写过一篇文章<基于ViewPager实现微信页面切换效果> 里面实现了类似微信Tab的页面,但是这种实现方法有个问题,就是以后所有的代码逻辑都必须在MainActivity中实现,这样就造成MainActivity文件非常臃肿,不利于代码管理. 下面我们基于ViewPager和FragmentPagerAdapter实现滑动通用Tab. 布局文件基本和上篇文章一致. 1.top.xml: <?xml version="1.0" encoding="

ViewPager添加小圆点

ViewPager添加小圆点很简单,但是如果是网络图片可能就不太好做了,所以我这里给出一种方法,当然你也可以用其他的 1.主界面xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.a

【Android】ViewPager实现图片左右滑动播放及添加点击事件

前两天老师找我帮她写个Android的demo.说是要实现一个图片左右滑动的效果,并且点击图片的时候会发出声音. 由于好久没写过Android了,所以花了一段时间来复习和学习.现将过程和实现简单记录如下.(项目参照了一部分CSDN博主Android将军的) 实现使用的是ViewPager 代码如下:在点击监听的部分,通过获取List<>中的控件添加触摸监听.当然你可以在各个页面添加多个控件,然后在获取该界面的控件,然后各个添加监听. 而且代码有优化的地方...不过只是为了演示,就没有太花时间去