在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,造成按下的逻辑一直会执行。意思就是,当用户保持按下操作,并从你的控件转移到外层控件时,会触发ACTION_CANCEL。为了解决这个

问题,上述代码需要修改为:

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

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

,才能解决这个问题。

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Android(安卓)短信链接跳浏览器打开APP
  3. [系统掌握Android] 三步走场景
  4. Git使用规范 Android(安卓)版
  5. Android(安卓)学习笔记 - 《第一行代码 Android(安卓)第二版》
  6. Android的Widget编写实例
  7. Android(安卓)Studio中ShareSDK分享的使用.
  8. Android怎样停止AsyncTask和Thread
  9. Android(安卓)Webview 使用小结

随机推荐

  1. mysql数据库设置utf-8编码的方法步骤
  2. mysql 8.0.17 winx64(附加navicat)手动配置
  3. mysql-8.0.17-winx64 部署方法
  4. mysql 8.0.17 安装与使用教程图解
  5. 解决Mysql 8.0.17 winx64版本安装过程中
  6. Mysql巧用join优化sql的方法详解
  7. MySQL慢查日志的开启方式与存储格式详析
  8. MySQL 使用DQL命令查询数据的实现方法
  9. MySQL5.6解压版服务无法启动之系统错误10
  10. MySQL InnoDB MRR优化指南