先看效果图:
实现
viewpager +handler 实现
- 首先定义一个类集成自Runnalbe
class AutoScrollTask implements Runnable {
/**
* 开始轮播
*/
public void start() {
UIUtils.postTaskDelay(this, 2000);
}
/**
* 停止轮播
*/
public void stop() {
UIUtils.removeTask(this);
}
@Override
public void run() {
int currentItem = mViewPager.getCurrentItem();
currentItem++;
mViewPager.setCurrentItem(currentItem);
//结束后递归 ,再次开始 继续执行
start();
}
}
- 然后viewpager的adapter(这里也可以用cycleviewpager)
private class PictureAdapter extends PagerAdapter {
@Override
public int getCount() {
if (mDatas != null) {
return Integer.MAX_VALUE;
}
return 0;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
position = position % mDatas.size();
ImageView iv = new ImageView(UIUtils.getContext());
ImageLoaderUtils.display(UIUtils.getContext(), iv, Constants.URLS.IMAGEBASEURL + mDatas.get(position));
container.addView(iv);
return iv;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
- 接下来启动任务
//设置viewpager的初始点和能够一直向左滑动
int diff = Integer.MAX_VALUE / 2 % mDatas.size();
int index = Integer.MAX_VALUE / 2;
mViewPager.setCurrentItem(index - diff);
// 自动轮播
final AutoScrollTask scrollTask = new AutoScrollTask();
scrollTask.start();
//停止轮播是 用户按下的时候停止
mViewPager.setOnTouchListener(new View.OnTouchListener() {
//这里也需要判断下 最小滑动距离。是滑动还是点击
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
scrollTask.stop();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
scrollTask.start();
break;
}
return false;
}
});
一些工具类
/**
* 延迟执行
*
* @param task
* @param delay 延迟多久
*/
public static void postTaskDelay(Runnable task, int delay) {
getMainThreadHandler().postDelayed(task, delay);
}
/**
* 移除任务
* @param task
*/
public static void removeTask(Runnable task) {
getMainThreadHandler().removeCallbacks(task);
}
/**
* 得到主线程 的handler
*
* @return
*/
public static Handler getMainThreadHandler() {
return BaseApplication.getmMainHandler();
}
这个在自定义application
public static Handler getmMainHandler() {
return mMainHandler;
}