viewpager 无线循环基本原理

    mFragments = new ArrayList<>();
    myViewpgerAdapter = new MyViewpgerAdapter(getSupportFragmentManager(), this, mFragments);
    handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            if (s < mFragments.size() + 1) {
                if (s == mFragments.size() - 1) {
                    mViewPager.setCurrentItem(s);
                    s++;

                } else if (s == mFragments.size()) {
                    mViewPager.setCurrentItem(0, false);//取消切换的动画效果
                    s = 0;
                } else {
                    mViewPager.setCurrentItem(s);
                    s++;
                }

            } else {
                s = 0;
            }

        }
    };
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            handler.sendMessage(new Message());
        }
    };
    Timer timer = new Timer();
    timer.schedule(timerTask, 1000, 1000);
    initview();
}

private void initview() {
    MyFragment myFragment = new MyFragment();
    MyFragment myFragment4 = new MyFragment();
    MyFragment2 myFragment2 = new MyFragment2();
    MyFragment2 myFragment3 = new MyFragment2();
    mFragments.add(myFragment);
    mFragments.add(myFragment2);
    mFragments.add(myFragment4);
    myViewpgerAdapter.notifyDataSetChanged();
    mViewPager.setAdapter(myViewpgerAdapter);
}

基本代码是这样子的,handler使用有问题,这样能够简单实现viewpager的无线循环但是最后一张切换的时候时间比较长,后期我会更新完美版本的无限循环,这个是基本的实现原理。首先说viewpager没有无线循环的模式,到最后一张就没办法在向后切换,这样做出来轮播图会很丑,之前见过貌似是联通上看到的,具体愿意不清楚了,哈哈。基本的思路是显示的页面有两个在创建的时候创建三个,正常切换到第三个,然后等下一次消息发过来切换的时候切换到第一个,这样视觉来说就是无线循环,。代码写的可能有些乱,很少这样写轮播图了,基本上我们的习惯都是导包一行代码实现,但是原理还是要知道一点对吧。后续更新比较完美的解决方案

你可能感兴趣的:(viewpager 无线循环基本原理)