咱么首先来看一下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); } } }
ViewPager实现无限轮播
最新推荐文章于 2019-12-25 11:10:29 发布