ViewPaper图片轮播,耦合度不高

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

相关文章
相关标签/搜索