轮播图
1 基础功能
vp = (ViewPager) findViewById(R.id.vp);
vp.setAdapter(new MyAdapter(images));
vp.setCurrentItem(1);
public MyAdapter(List<Integer> images){
this.images = images;
}
@Override
public int getCount(){
return images.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position){
ImageView view = new ImageView(container.getContext());
view.setBackgroundResource(images.get(position));
container.addView(view);
return view;
}
@Override
public boolean isViewFromObject(View view, Object object){
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object){
container.removeView((View) object);
}
2 无限轮播
1 初始化
images.add(0,最后一个位置的图片);
images.add(第一个位置的图片);
2 设置页面滑动监听
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener(){
@Override
public void onPageSelected(int position){
if (images.size() > 1){
if (position < 1){
position = images.size() - 2;
vp.setCurrentItem(position, false);
} else if (position > images.size() - 2){
position = 1;
vp.setCurrentItem(position, false);
...
3 跟图片数量相关的位置,加图片数量保护
@Override
public int getCount(){
return images.size() > 3 ? images.size() : 1;
}
3 自动轮播
1 设置hanlder
private static final int start_roll = 1;
private Handler MyHandler = new Handler(){
@Override
public void handleMessage(Message msg){
if (msg.what == start_roll){
if (vp != null){
vp.setCurrentItem(vp.getCurrentItem() + 1);
this.sendEmptyMessageDelayed(start_roll,2000);
...
2 监听页面触摸
@Override
public boolean onTouchEvent(MotionEvent event){
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
MyHandler.removeMessages(start_roll);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
MyHandler.sendEmptyMessageDelayed(start_roll,2000);
break;
}
return false;
}