1、在processData方法,发消息触发Handler的handleMessage方法,切换轮播图
// 使用Handler 发送消息,实现轮播图切换到下一页
if(handler==null){
handler = new MyHandler();
}
// 发送消息前先把以前发的消息删除掉
handler.removeCallbacksAndMessages(null);//null 是清除之前发送的所有消息
// 发送3s的延迟消息
handler.sendMessageDelayed(Message.obtain(), 3000);
2、在handleMessage方法中,再次发送消息,实现无限循环
class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 收到延迟消息后,把轮播图切换到下一页
int nextitem = (vp_tabdetail_topimg.getCurrentItem()+1)%topnewsData.size();
// 如果切换到第1个条目时,不要切换动画
if(nextitem==0){
vp_tabdetail_topimg.setCurrentItem(nextitem,false);
}else{
vp_tabdetail_topimg.setCurrentItem(nextitem);
}
// 再发一个消息,实现无限循环
handler.sendMessageDelayed(Message.obtain(), 3000);
}
}
3、图片的事件处理
// 监听轮播图的图片,实现用户触摸时,停止轮播图循环
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 用户手指按下,停止轮播图播放
System.out.println("用户手指按下,停止轮播图播放");
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_UP:
// 用户手指抬起,继续轮播图播放
System.out.println("用户手指抬起,继续轮播图播放");
handler.sendMessageDelayed(Message.obtain(), 3000);
break;
case MotionEvent.ACTION_CANCEL:
// 事件取消,继续轮播图播放
System.out.println("事件取消,继续轮播图播放");
handler.sendMessageDelayed(Message.obtain(), 3000);
break;
default:
break;
}
return true;// 返回false 不消费事件,以后父容器就不传递事件下来,需要返回true,这样父容器才会把其他的事件传递下来
}
});