在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. 基本术语表【WF】
  2. 手把手教你编写Logstash插件
  3. C#,java,C++ 等变量命名规则
  4. 对象复制、克隆、深度clone
  5. jQuery 重新温习 遗忘知识点
  6. PHP二维数组根据某个键名排序
  7. 经典sql总结(1)
  8. UVA 465 (13.08.02)
  9. JavaScript HTML DOM 事件
  10. VS2012 利用正则统计项目代码行数
  11. iFace Chain [ 爱妃链 ] 或将凭借人脸密钥技术成为安全领域最大的赢家
  12. Gartner 2018 数据库系列报告发布 巨杉数据库连续两年入选
  13. node中间层转发请求
  14. MySQL5.7 GTID学习笔记,[MySQL 5.6] GTID实现、运维变化及存在的bug
  15. poj 2236 加点 然后判断某两点是否连通
  16. Java Dictionary 类存储键值
  17. python 基础笔记
  18. json在线工具
  19. 为免费app嵌入Admob广告
  20. 举一反三 willDisplayCell在UICollectionView中的一些应用

热门文章

  1. BERT的开源实现的使用
  2. go语言之进阶篇 channel介绍
  3. iOS截屏方法
  4. RxJava【过滤】操作符 filter distinct throttle take skip first MD
  5. R读 txt 文件
  6. "garbage at end of line" on Windows 10
  7. C#.NET常见问题(FAQ)-控制台程序如何做弹窗
  8. ArcGIS 后台服务器抛出异常
  9. select/poll/epoll 对比
  10. javascript中IE浏览器不支持NEW DATE()带参数的解决方法