原理:
(1)在原有的adapter里添加一头一尾,当滑动到尾部的时候,通过setCurrentItem(1,false)切换到第二项,同理,滑动到第0项则切换到最后一项
(2)使用timer进行自动跳转
代码:
/**
*记录当前viewpager处于那一页
*/
private int mNowPage;
/**
*储存Fragment的list
*/
private List<fragment> mLs = new ArrayList<fragment>();
// 无限循环viewpager
mVp = (ViewPager) getView().findViewById(R.id.vp);
mVapater = new VPAdapterT(getFragmentManager());//配置viewpager
mVp.setAdapter(mVapater);
mVp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
//selected这个方法,是在滑动时,手指弹起的那一刻
//setCurrentItem(1,false)方法不能在这里执行
//否则在首位切换时手指弹起就直接跳转
//这里主要处理小圆点的切换,代码不作补充
mNowPage = arg0;
if (mNowPage != 0&& mNowPage != mLs.size() - 1) {
mLs_Dots.get(mNowDots).setEnabled(false);
mNowDots = mNowPage - 1;
mLs_Dots.get(mNowDots).setEnabled(true);
}else if(mNowPage==0){
mLs_Dots.get(mNowDots).setEnabled(false);
mNowDots=mLs_Advertisement_.size() - 3;
mLs_Dots.get(mNowDots).setEnabled(true);
}else if (mNowPage== mLs.size() - 1) {
mLs_Dots.get(mNowDots).setEnabled(false);
mNowDots=0;
mLs_Dots.get(mNowDots).setEnabled(true);
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
//PageScrollStateChanged有不同的状态,arg0为0时代表动画结束,1为触屏
//所以首尾交换只能放在这里进行,就察觉不到其实已经切换了页面
if (arg0 == 0) {
if (mNowPage == mLs.size() - 1) {
mVp.setCurrentItem(1, false);
}
if (mNowPage == 0) {
mVp.setCurrentItem(mLs.size() - 2,
false);
}
MainActivity.this.time(); //如果页面切换完毕,则执行下一次计时
}
if (arg0==1) {
timer.cancel(); //如果手指触摸这个viewpager,先停止计时器
}
}
});</fragment></fragment>
计时器:
private Timer timer ;
private void time() {
timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
timer.schedule(task, 5000);
}
private Handler handler = new Handler() {
@SuppressLint("HandlerLeak")
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
timer.cancel();
mVp.setCurrentItem(mNowPage + 1);
break;
}
super.handleMessage(msg);
}
};