ViewPager实现无限轮播

咱么首先来看一下ViewPager的Adapter
/**
1.需要注意的是:
在布局xml中,使用相对布局包裹ViewPager控件与线性布局(设置为水平)

*/

public class MyPagerAdapter extends PagerAdapter{ private int [] images; private Context context; private Handler handler; public MyPagerAdapter(Context context, int[] images, Handler handler) { this.context = context; this.images = images; this.handler=handler; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override
/***//此方法是我们用手触摸图片是,它可以暂停,松手之后又回到自动轮播状态
public Object instantiateItem(ViewGroup container, int position) { ImageView imageView=new ImageView(context); imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: handler.removeCallbacksAndMessages(null); break; case MotionEvent.ACTION_UP: handler.sendEmptyMessageDelayed(0,2000); break; case MotionEvent.ACTION_CANCEL: handler.sendEmptyMessageDelayed(0,2000); break; } return true; } });/* imageView.setImageResource(images[position%images.length]);//需要模数组总长度 container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); }}


//MainActivity代码
public class MainActivity extends AppCompatActivity {

    private ViewPager vp;
    private LinearLayout layout;
    private List<ImageView> img=new ArrayList<>();

//图片放入数组里
 private int [] images=new int[]{R.drawable.aa,R.drawable.ab,R.drawable.ac,R.drawable.ad,R.drawable.af,R.drawable.as};

    Handler handler=new Handler(){
        @Override
        public void dispatchMessage(Message msg) {
            super.dispatchMessage(msg);
            if(msg.what==0){
                //获取ViewPager当前页码索引值
                int count=vp.getCurrentItem();
                count++;
                vp.setCurrentItem(count);
                //自己调自己
                handler.sendEmptyMessageDelayed(0,2000);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp= (ViewPager) findViewById(R.id.vp);
        layout = (LinearLayout) findViewById(R.id.ll);
        //适配器
        MyPagerAdapter adapter=new MyPagerAdapter(this,images,handler);
        vp.setAdapter(adapter);
        //设置当前条目值
        vp.setCurrentItem(images.length*5000);
        //添加画的小圆点
        initride();
        //监听
        vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            @Override
            public void onPageSelected(int position) {
                for(int x=0;x<img.size();x++){
                    if(x==position%images.length){
                        img.get(x).setImageResource(R.drawable.dots_focus);
                    }else {
                        img.get(x).setImageResource(R.drawable.dots_normal);
                    }
                }
            }
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
        handler.sendEmptyMessageDelayed(0,2000);
    }
    //添加小圆点
    private void initride() {
        img.clear();
        layout.removeAllViews();
        for(int i=0;i<images.length;i++){
            ImageView iv=new ImageView(this);
            if(i==0){
                iv.setImageResource(R.drawable.dots_focus);
            }else {
                iv.setImageResource(R.drawable.dots_normal);
            }
            //Layoutd的宽高
            LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20,20);
            params.setMargins(5,0,5,0);
            img.add(iv);
            layout.addView(iv,params);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值