ViewPaper图片轮播是挺经常使用的一个东西java
处理很差 可能常常遇到崩溃啥的问题,经一位大神指导,总结出一个类android
首先自定义一个ViewPaper,能够当作一个工具类用ide
public class MyViewpaper extends ViewPager { private Handler mHandler ; public MyViewpaper(Context context){ super(context); mHandler = new AutoHandler(this); } public MyViewpaper(Context context, AttributeSet attrs) { super(context, attrs); mHandler = new AutoHandler(this); } public class AutoHandler extends Handler { public static final int SCROOL_ONECE = 1; private SoftReference<MyViewpaper> mvpSoftReference; public AutoHandler(MyViewpaper viewpaper){ mvpSoftReference = new SoftReference<MyViewpaper>(viewpaper); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); MyViewpaper viewpaper = mvpSoftReference.get(); if(viewpaper !=null){ if(SCROOL_ONECE == msg.what){ mHandler.removeMessages(AutoHandler.SCROOL_ONECE); viewpaper.scrollOnece(); } } } } public void scrollOnece(){ PagerAdapter adapter = getAdapter(); int currentItem = getCurrentItem(); int totalCount =0; //有一张不自动滑动 if(adapter == null||(totalCount = adapter.getCount())<=1){ return; } int nextItem = currentItem +1; if(totalCount-1 == currentItem){ nextItem = 0; setCurrentItem(nextItem,false); }else{ setCurrentItem(nextItem,true); } mHandler.sendEmptyMessageDelayed(AutoHandler.SCROOL_ONECE, 5000); } public void startAutoScroll(long dayTime){ PagerAdapter adapter = getAdapter(); int totalCount =0; //有一张不自动滑动 if(adapter == null||(totalCount = adapter.getCount())==0){ return; } //解决内存被回收的时候再次显示处理 int currentItem = getCurrentItem(); setCurrentItem(currentItem,false); mHandler.sendEmptyMessageDelayed(AutoHandler.SCROOL_ONECE, dayTime); } }
xml中定义工具
<com.iningke.qizhong.base.MyViewpaper android:id="@+id/viewpager_lunbo" android:layout_width="match_parent" android:layout_height="match_parent"/>
而后就是调用this
myViewpaper.startAutoScroll(5000);
5000指的是图片滚动到下一张图片的时间code