如何实现轮播以及自动轮播,网上有很多帖子,这里就不赘述…
但是大多都有个不大不小的问题,就是当用户去划动轮播图的时候,并不会从新计时…
举个例子:轮播图5秒滚动一次,当用户在4.5秒的时候往后划动了一下,由于没有从新计时,轮播图会在0.5秒后滚动到下一张,这就造成了很不好的用户体验…
下面是我的做法,很简单,只用Handler~~~
ViewPager的监听:
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
handler.sendEmptyMessage(0x01);//发送消息1
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
Handler:
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
if(msg.what == 0x01){//收到消息1
handler.removeMessages(0x02);//remove调消息2
handler.sendEmptyMessageDelayed(0x02, 5000);//重新发送消息2
}else if(msg.what == 0x02){//收到消息2,滚动到下一张轮播图
currentItem ++;
headerViewPager.setCurrentItem(currentItem);
}
};
};
当收到消息0x01的时候,有两种情况:一是自动轮播发过来的,那么说明消息0x02已经收到并执行,那么handler.removeMessages(0x02)
并没有什么卵用,直接发延迟5秒发送消息0x02;二是用户滑动了一下,那么handler.removeMessages(0x02)
正好把刚才准备发送的消息0x02remove掉,重新发送,就相当于了重新计时