Activity:
private void initView(View view){ initData(); homeViewPagerAdapter = new HomeViewPagerAdapter(list); viewPager.setAdapter(homeViewPagerAdapter); startAutoPlay(); } private void initData() { list = new ArrayList<>(); ImageView view1 = new ImageView(getActivity()); view1.setImageDrawable(getResources().getDrawable(R.mipmap.view_page)); ImageView view2 = new ImageView(getActivity()); view2.setImageDrawable(getResources().getDrawable(R.mipmap.home2)); view2.setScaleType(ImageView.ScaleType.CENTER_CROP); ImageView view3 = new ImageView(getActivity()); view3.setImageDrawable(getResources().getDrawable(R.mipmap.home1)); view3.setScaleType(ImageView.ScaleType.CENTER_CROP); list.add(view1); list.add(view2); list.add(view3); } /** * 开启自动滚动的方法 */ private void startAutoPlay() { isAutoPlay = true; handler.removeCallbacks(task); handler.postDelayed(task, delayTime); } /** * 暂停自动滚动 */ public void pauseAutoPlay() { isAutoPlay = false; handler.removeCallbacks(task); } /** * 自动滚动核心代码 */ private final Runnable task = new Runnable() { @Override public void run() { if (isAutoPlay) { // 自动滚动逻辑处理 currentItem = viewPager.getCurrentItem(); currentItem++; if(currentItem == homeViewPagerAdapter.getCount()) { currentItem = 0; viewPager.setCurrentItem(currentItem); handler.postDelayed(this, delayTime); } else { viewPager.setCurrentItem(currentItem); handler.postDelayed(this, delayTime); } } else { handler.postDelayed(this, delayTime); } } }; private Runnable runable = new Runnable() { @Override public void run() { //true表示平滑滚动 viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true); } }; public void startScroll() { timerTask = new TimerTask() { @Override public void run() { hander.post(runable); } }; timer.schedule(timerTask, DISPLAY_TIME, DISPLAY_TIME); } public void stopScroll() { timerTask.cancel(); timerTask = null; }
HomeViewPagerAdapter:
public class HomeViewPagerAdapter extends PagerAdapter { private List<ImageView> list; public HomeViewPagerAdapter(List<ImageView> list) { this.list = list; } @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(list.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(list.get(position)); return list.get(position); } }
主要逻辑就是使用Handler的postDelay()方法,不断得到viewpager的当前页,然后+1,再用viewpager的setCurrent()方法设置当前+1后的界面。