实现ViewPager无限循环与自动播放
自动播放,无非就是将ViewPager长度加到很大很大,大到无聊用户滑到手机没电为止,
ViewPager实现滑动的监听,从而实现我要你滑到哪里你就去哪里。
mviewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
currentItem = position;
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
关键函数
mViewPager.setCurrentItem(currentItem);
//设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动
mViewPager.setCurrentItem((mImageViews.length) * 100);
启动自动滚动的子线程
@Override
public void onResume() {
super.onResume();
//activity启动两秒钟后,发送一个message,用来将viewPager中的图片切换到下一个
mHandler.sendEmptyMessageDelayed(1, 2000);
}
@Override
public void onStop() {
super.onStop();
//停止viewPager中图片的自动切换
mHandler.removeMessages(1);
}
Handler
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch(msg.what) {
case 1:
mviewpager.setCurrentItem(currentItem + 1);
//每两秒钟发送一个message,用于切换viewPager中的图片
this.sendEmptyMessageDelayed(1, 2000);
}
}
};
适配器
@Override
public int getCount() {
return Integer.MAX_VALUE/2;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(marrayList.get(position%marrayList.size()));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v = marrayList.get(position%marrayList.size());
//防止v被添加前存在与另一个父容器中 如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。
if (v.getParent() != null) {
((ViewGroup) v.getParent()).removeView(v);
}
container.addView(v);
return v;
}
备注,图片必须大于3张.
其他可参考链接: http://blog.csdn.net/xiaanming/article/details/8966621