先看效果图:
实现
viewpager +handler 实现
首先定义一个类集成自Runnalbe
12345678910111213141516171819202122232425class AutoScrollTask implements Runnable {/*** 开始轮播*/public void start() {UIUtils.postTaskDelay(this, 2000);}/*** 停止轮播*/public void stop() {UIUtils.removeTask(this);}public void run() {int currentItem = mViewPager.getCurrentItem();currentItem++;mViewPager.setCurrentItem(currentItem);//结束后递归 ,再次开始 继续执行start();}}然后viewpager的adapter(这里也可以用cycleviewpager)
12345678910111213141516171819202122232425262728private class PictureAdapter extends PagerAdapter {public int getCount() {if (mDatas != null) {return Integer.MAX_VALUE;}return 0;}public boolean isViewFromObject(View view, Object object) {return view == object;}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;}public void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}接下来启动任务
12345678910111213141516171819202122232425//设置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() {//这里也需要判断下 最小滑动距离。是滑动还是点击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;}});
一些工具类
1234567891011121314151617181920212223242526272829 /*** 延迟执行** @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();}这个在自定义applicationpublic static Handler getmMainHandler() {return mMainHandler;}