Android的OnTouch事件,添加触摸颜色变化,ACTION_UP事件不触发解决方案

Android的Button按钮,ACTION_UP事件不触发解决方案

 

     在android 编程时,有时候要实现当Button一直按下的时候,执行一些逻辑代码,当按钮弹起的时候,终止这些逻辑代码的执行。

     比如在 设置页面的滑动开关时,如果不监听ACTION_CANCEL,在滑动到中间时,如果你手指上下移动,就是移动到开关控件之外,就会造成开关的按钮停顿在中间位置。

     在一般情况下,实现这个逻辑需要注册OnTouchListener监听,OnTouchListener的OnTouch方法中代码如下:

switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
    //按钮按下逻辑 
    break; 
    case MotionEvent.ACTION_UP: 
    //按钮弹起逻辑 
    break; 

在一般情况下,这样写是没有问题的,

但是当手指快速滑过这个Button时,就会发现只触发了

ACTION_DOWN时间,没有触发ACTION_UP,就会导致,按钮按下的逻辑代码一直会执行。当焦点移动到件之外,此时会触发ACTION_CANCEL,而不是ACTION_UP,造成按下的逻辑一直会执行。

为了解决这个问题,上述代码可以需要修改为:

switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
    //按钮按下逻辑
    break;
    case MotionEvent.ACTION_UP:
    //按钮弹起逻辑
    break;
    case MotionEvent.ACTION_CANCEL:
    //按钮弹起逻辑
    break;
}

ACTION_UP处理的是在Button原位置弹起,ACTION_CANCEL处理的是焦点离开Button,两者都需要处理

,才能解决这个问题。

示例(我这个是在按下的时候,让按钮放大,手抬起的时候缩小操作):

复制代码
login_with_sina.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    System.out.println("++++++key_down");
                    AnimUtil.showOnFocusAnimation(login_with_sina);
                    break;
                case MotionEvent.ACTION_UP:
                    System.out.println("++++++key_down");
                    AnimUtil.showLooseFocusAinimation(login_with_sina);
                    break;
                case MotionEvent.ACTION_CANCEL:
                    System.out.println("++++++key_down");
                    AnimUtil.showLooseFocusAinimation(login_with_sina);
                    break;
                }
                return true;
            }
        });
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值