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;
            }
        });
Android的Button按钮,ACTION_UP事件不触发解决方案的更多相关文章
- Xamarin for android:为button设置click事件的几种方法
		
原文:Xamarin for android:为button设置click事件的几种方法 在Xamarin中一个最基础的事情,就是为一个button指定click事件处理方法,可是即使是这么一件事也有 ...
 - Android studio button 按钮 四种绑定事件的方法
		
package com.geli_2.sujie.sujiegeili2testbutton; import android.os.Bundle; import android.support.v7. ...
 - Android笔记——Button点击事件几种写法
		
Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...
 - Android代码规范----按钮单击事件的四种写法
		
[前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...
 - Android学习-----Button点击事件几种写法
		
Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...
 - Android 自定义Button按钮显示样式(正常、按下、获取焦点)
		
现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天学习自定义Button按钮样式.Button样式修改的是Button的背景 ...
 - Jquery/js引入的button的onclik事件只触发一次
		
目标描述 我要实现的是:通过监听button的click事件,从而通过ajax向servlet发送请求获取数据库中的数据,然后返回的页面,并要求局部刷新 一次页面的加载是html直接页面初始化本身的 ...
 - wxpython 按钮等事件的触发
		
1.按钮事件的触发 方法中第二个参数为event
 - input 的blur事件之后button的onclick事件不执行解决方案
		
最近发现网页程序中有个BUG,就是在input标签输入框中输入完数据后,直接点击“取消” 按钮的时候.出现网页崩死的情况: 经过小主酸菜我,各种方法的尝试后,找到一个初步可以解决的方案,在这里分享给大 ...
 
随机推荐
- 基于fasttext的情感分析,准备先做一版
			
博客文章地址: https://blog.csdn.net/sinat_33741547/article/details/78803766 代码地址: https://github.com/lpty/ ...
 - [leetcode]Triangle @ Python
			
原题地址:https://oj.leetcode.com/problems/triangle/ 题意: Given a triangle, find the minimum path sum from ...
 - 杨晓峰-Java核心技术-9 HashMap Hashtable TreeMap MD
			
目录 第9讲 | 对比Hashtable.HashMap.TreeMap有什么不同? 典型回答 考点分析 知识扩展 Map 整体结构 有序 Map HashMap 源码分析 容量.负载因子和树化 精选 ...
 - 领扣-5 最长回文子串 Longest Palindromic Substring MD
			
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
 - tensorflow_python中文手册
			
https://www.tensorflow.org/api_docs/python/tf/nn/static_bidirectional_rnn https://www.w3cschool.cn/t ...
 - Kendall's tau-b(肯德尔)等级相关系数
			
Kendall's tau-b(肯德尔)等级相关系数:用于反映分类变量相关性的指标,适用于两个分类变量均为有序分类的情况.对相关的有序变量进行非参数相关检验:取值范围在-1-1之间,此检验适合于正方形 ...
 - Kafka:ZK+Kafka+Spark Streaming集群环境搭建(八)安装zookeeper-3.4.12
			
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
 - sublime同步文件与siderbar
			
有时候,打开了sider bar,想和Eclipse.idea一样,每打开一个tab,就可以在左侧的sider bar 目录上面看到我当前的位置,于是找到了一个插件. SyncedSideBar 安装 ...
 - .Net C# 5.0 规范:迭代器
			
本文内容 枚举器 enumerator 接口 - IEnumerator 可枚举 enumerable 接口 - IEnumerable 产生类型 yield type 枚举器 enumerator ...
 - MVC 之 解决MVC中使用BundleConfig.RegisterBundles引用Css及js文件发布后的丢失
			
在MVC3中我们这样引用资源文件: <link href="@Url.Content("~/Content/Site.css")" rel="s ...