ViewPager无限轮播+自定义圆点

在drawable创建两个shape标签的xml布局,暗色个红色

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <corners android:radius="5dp"/>
    <solid android:color="#88000000"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <corners android:radius="8dp" />

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

</shape>

在代码中实现,把创建的圆点添加到新建的 ArrayList中

        //根据lunboPager的个数绘制圆点
        dotList = new ArrayList<ImageView>();
        for (int i = 0; i < lunboPager.length; i++) {
            ImageView image = new ImageView(MainActivity.this);
            if(i==0){
                image.setImageResource(R.drawable.dot_red);
            }else{
                image.setImageResource(R.drawable.dot_hui);
            }
            //把创建的圆点图片添加到布局中
             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20);
            params.setMargins(5,0,5,0);
            linear.addView(image, params);
            dotList.add(image);
        }

以上代码是绘制原点的,下面实现图片的无限轮播

//轮波图需要的图片
    private void initDataPager() {
        lunboPager = new int[] {R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4}; 
    }

viewpager适配器

    //viewpager适配器
    private void setPagerAdapter() {
        vp.setCurrentItem(lunboPager.length*5000);
        vp.setAdapter(new PagerAdapter() {

            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0==arg1;
            }

            @Override
            public int getCount() {
                return Integer.MAX_VALUE;
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                //设置轮播图片
                ImageView image = new ImageView(MainActivity.this);
                image.setImageResource(lunboPager[position%lunboPager.length]);
                container.addView(image);
                //为图片添加点击监听
                image.setOnTouchListener(new OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN://down 手指按下的时候,图片停止滑动
                            // 手指按下的时候,停止自动轮播的任务
                            // 移除所有的消息及回调 null 移除所有
                            handler.removeCallbacksAndMessages(null);
                            break;
                        case MotionEvent.ACTION_UP://up 手指抬起的时候
                            handler.sendEmptyMessageDelayed(0, 2000);
                            break;
                        case MotionEvent.ACTION_CANCEL:
                            handler.sendEmptyMessageDelayed(0, 2000);
                            break;
                        }
                        return true;
                    }
                });
                return image;
            }

            @Override
            public void destroyItem(ViewGroup container, int position,
                    Object object) {
                container.removeView((View) object);
            }
        });

viewpager的滑动监听

    private void setPagerLiseter() {
        vp.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                //界面切换的时候,下面的圆点跟着滑动
                for (int i = 0; i < lunboPager.length; i++) {
                    if(i==arg0%lunboPager.length){
                        dotList.get(i).setImageResource(R.drawable.dot_red);
                    }else{
                        dotList.get(i).setImageResource(R.drawable.dot_hui);
                    }
                }
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {

            }
        });
        handler.sendEmptyMessageDelayed(0, 2000);
    }

Handler 处理消息,实现轮播

    Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            if(msg.what==0){
                //获取当前vp的下标
                int currentItem = vp.getCurrentItem();
                currentItem++;
                vp.setCurrentItem(currentItem);
                handler.sendEmptyMessageDelayed(0, 2000);
            }
        };
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_137237056

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值