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

转载于:https://www.cnblogs.com/yejiurui/p/3770786.html

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

  1. android 自定义控件 焦点,Android 自定义Button按钮显示样式(正常、按下、获取焦点)...

    现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天学习自定义Button按钮样式.Button样式修改的是Button的背景 ...

  2. android onclick方法吗,Android中button的onClick事件几种方法

    Android中button的onClick事件几种方法 发布时间:2020-09-03 02:36:31 来源:脚本之家 阅读:100 作者:水桶前辈 Android中button的onClick事 ...

  3. Android代码规范----按钮单击事件的四种写法

    [前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...

  4. Android之Button按钮

    android中的按钮控件,直接继承了TextView.,在页面上的显示是一个矩形的图形.控件的基本属性: android:id="":按钮的唯一标识. android:layou ...

  5. Android 自定义Button按钮显示样式(正常、按下、获取焦点)

    2019独角兽企业重金招聘Python工程师标准>>> 现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天 ...

  6. 移动端touchend事件不触发解决方案

    移动端touchend事件不触发,需要在touchstart中加入: 1 e.preventDefault(); 但是问题来了,阻止默认事件后,页面原先的滚动条也无法滚动了. 查阅了资料,在stack ...

  7. Android中Button点击事件

    在Android中的Button控件上,有三种鼠标点击事件,分别是鼠标点击事件,长按事件,触摸事件 接下来,看一下是如何进行的 方法一: 在layout中创建一个xml文件,使用什么布局方式,你都可以 ...

  8. android 自定义button点击事件,自定义View(2)-从源码分析button的onClick和onTouch

    Android事件分发机制介绍 author:秦子帅 time: 2018-6-14 学习之前,我们先弄明白一件事,到底什么是Android事件分发机制?说白了就是Android触摸事件的传递流程. ...

  9. 安卓Android Studio Button按钮background不生效无效问题

    今天又是无语的一天...... 在学习安卓按钮这部分的时候,我新建了xml资源文件用来专门配置按钮的样式: <?xml version="1.0" encoding=&quo ...

最新文章

  1. jsapi设计_一个简单API设计
  2. Selenium+phanmJs 操作浏览器 爬取数据
  3. Java的Runtime类介绍
  4. zookeeper的设计猜想-阶段二:执行事务提交
  5. Python 执行代码的两种方式
  6. python bind sock_python SOCKET编程详细介绍
  7. 机器学习中的数学(四)--线性代数
  8. 深度神经网络编程细节
  9. CC1101魔幻的收发切换机制
  10. Properties文件操作
  11. 程序员必备的七个电脑软件
  12. matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取
  13. 区块链技术涉及哪些编程语言?
  14. 新粉色苹果CMS10视频站源码模板 仿APP内附教程
  15. js中iif的真假条件的判断方式
  16. ERROR: resetting DM9000 -> not responding dm9000 not found at 0x88000000问题解决
  17. freeswitch对接电信线路VOLTE视频通话
  18. 705.设计哈希集合
  19. Netty与SpringBoot整合
  20. adonis命令模块学习笔记

热门文章

  1. wxpython可视化_使用wxPython的绘图模块wxPyPlot进行数据可视化
  2. 语言模拟蒲丰问题_R语言小数定律的保险业应用:泊松分布模拟索赔次数
  3. android 日期国际化,Flutter 日期时间选择类控件及国际化
  4. 为什么Java中类方法不能访问实例方法
  5. 8253译码电路设计以及初始化编程讲解
  6. ejb模式_EJB的完整形式是什么?
  7. krsort_PHP krsort()函数与示例
  8. c语言指针++_C ++此指针| 查找输出程序| 套装3
  9. Java Calendar getActualMaximum()方法与示例
  10. 服务器可否替代手机芯片,基于ARM的处理器能取代桌面处理器吗?