在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;            }        });

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Android(安卓)ApiDemo 系列解析【View->Button】
  3. Kotlin从入门到沉迷
  4. Android开发学习之路--Content Provider之初体验
  5. 【android】ImageView的src和background的区别以及两者的妙用
  6. Android本地化开发技巧
  7. 这也许是Android一句话权限适配的更优解决方案
  8. 说说 Android(安卓)的 Material Design 设计(二)——滑动菜单
  9. Android(安卓)MVVM的沉思

随机推荐

  1. Android 动画系列三:Propety Animation
  2. 加快Android单模块编译
  3. Android Studio快捷键设置成跟Eclipse一
  4. android 登陆、提交数据或加载数据时提示
  5. 手动编译android项目
  6. Android中Launcher对于AppWidget处理的分
  7. Android之UI学习篇十:使用TabHost实现微博
  8. 关于Android中传递对象发现问题随笔
  9. android 获取uri的正确文件路径的办法
  10. Android 数字签名