ViewPager无限轮播+自定义圆点

来源:互联网 发布:adblock mac chrome 编辑:程序博客网 时间:2024/04/29 16:43

在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);            }        };    };
0 0
原创粉丝点击