使用Handler实现无限循环

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,这样父容器才会把其他的事件传递下来
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值