当前位置: 首页 > 工具软件 > Actionbutton > 使用案例 >

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

姬国安
2023-12-01

  在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,两者都需要处理才能解决这个问题。

 类似资料: