Android的Button按钮,ACTION_UP事件不触发解决方案
在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事件不触发解决方案相关推荐
- android 自定义控件 焦点,Android 自定义Button按钮显示样式(正常、按下、获取焦点)...
现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天学习自定义Button按钮样式.Button样式修改的是Button的背景 ...
- android onclick方法吗,Android中button的onClick事件几种方法
Android中button的onClick事件几种方法 发布时间:2020-09-03 02:36:31 来源:脚本之家 阅读:100 作者:水桶前辈 Android中button的onClick事 ...
- Android代码规范----按钮单击事件的四种写法
[前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...
- Android之Button按钮
android中的按钮控件,直接继承了TextView.,在页面上的显示是一个矩形的图形.控件的基本属性: android:id="":按钮的唯一标识. android:layou ...
- Android 自定义Button按钮显示样式(正常、按下、获取焦点)
2019独角兽企业重金招聘Python工程师标准>>> 现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天 ...
- 移动端touchend事件不触发解决方案
移动端touchend事件不触发,需要在touchstart中加入: 1 e.preventDefault(); 但是问题来了,阻止默认事件后,页面原先的滚动条也无法滚动了. 查阅了资料,在stack ...
- Android中Button点击事件
在Android中的Button控件上,有三种鼠标点击事件,分别是鼠标点击事件,长按事件,触摸事件 接下来,看一下是如何进行的 方法一: 在layout中创建一个xml文件,使用什么布局方式,你都可以 ...
- android 自定义button点击事件,自定义View(2)-从源码分析button的onClick和onTouch
Android事件分发机制介绍 author:秦子帅 time: 2018-6-14 学习之前,我们先弄明白一件事,到底什么是Android事件分发机制?说白了就是Android触摸事件的传递流程. ...
- 安卓Android Studio Button按钮background不生效无效问题
今天又是无语的一天...... 在学习安卓按钮这部分的时候,我新建了xml资源文件用来专门配置按钮的样式: <?xml version="1.0" encoding=&quo ...
最新文章
- jsapi设计_一个简单API设计
- Selenium+phanmJs 操作浏览器 爬取数据
- Java的Runtime类介绍
- zookeeper的设计猜想-阶段二:执行事务提交
- Python 执行代码的两种方式
- python bind sock_python SOCKET编程详细介绍
- 机器学习中的数学(四)--线性代数
- 深度神经网络编程细节
- CC1101魔幻的收发切换机制
- Properties文件操作
- 程序员必备的七个电脑软件
- matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取
- 区块链技术涉及哪些编程语言?
- 新粉色苹果CMS10视频站源码模板 仿APP内附教程
- js中iif的真假条件的判断方式
- ERROR: resetting DM9000 -> not responding dm9000 not found at 0x88000000问题解决
- freeswitch对接电信线路VOLTE视频通话
- 705.设计哈希集合
- Netty与SpringBoot整合
- adonis命令模块学习笔记
热门文章
- wxpython可视化_使用wxPython的绘图模块wxPyPlot进行数据可视化
- 语言模拟蒲丰问题_R语言小数定律的保险业应用:泊松分布模拟索赔次数
- android 日期国际化,Flutter 日期时间选择类控件及国际化
- 为什么Java中类方法不能访问实例方法
- 8253译码电路设计以及初始化编程讲解
- ejb模式_EJB的完整形式是什么?
- krsort_PHP krsort()函数与示例
- c语言指针++_C ++此指针| 查找输出程序| 套装3
- Java Calendar getActualMaximum()方法与示例
- 服务器可否替代手机芯片,基于ARM的处理器能取代桌面处理器吗?