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