在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事件不触发解决方案的更多相关文章

  1. Xamarin for android:为button设置click事件的几种方法

    原文:Xamarin for android:为button设置click事件的几种方法 在Xamarin中一个最基础的事情,就是为一个button指定click事件处理方法,可是即使是这么一件事也有 ...

  2. Android studio button 按钮 四种绑定事件的方法

    package com.geli_2.sujie.sujiegeili2testbutton; import android.os.Bundle; import android.support.v7. ...

  3. Android笔记——Button点击事件几种写法

    Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...

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

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

  5. Android学习-----Button点击事件几种写法

    Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...

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

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

  7. Jquery/js引入的button的onclik事件只触发一次

    目标描述 我要实现的是:通过监听button的click事件,从而通过ajax向servlet发送请求获取数据库中的数据,然后返回的页面,并要求局部刷新 一次页面的加载是html直接页面初始化本身的 ...

  8. wxpython 按钮等事件的触发

    1.按钮事件的触发 方法中第二个参数为event

  9. input 的blur事件之后button的onclick事件不执行解决方案

    最近发现网页程序中有个BUG,就是在input标签输入框中输入完数据后,直接点击“取消” 按钮的时候.出现网页崩死的情况: 经过小主酸菜我,各种方法的尝试后,找到一个初步可以解决的方案,在这里分享给大 ...

随机推荐

  1. centos6安装ElasticSearch5.6.5错误记录

    在centos6安装ES的时候遇到不少问题.这里记录日志.以后安装一定要升级centos7,别说啥稳定问题了,该升级就升级. [1]: max file descriptors [4096] for ...

  2. ASP.NET压力测试

    本文导读:对于直接面对互联网用户的WEB应用,在开发设计的时候必须格外小心,因为谁也不知道在单位时间内WEB程序访问和运行的速度.所以,在程序设计完成以后,最后针对程序进行一些严格的甚至是苛刻的测试, ...

  3. Mac下brew/memcached/nginx/iterm/zsh的安装

    brew  https://www.cnblogs.com/fireworld/p/8609190.html memcached https://blog.csdn.net/whereismatrix ...

  4. OpenStack云桌面系列【2】—OpenStack和Spice

    OpenStack和VNC Openstack默认安装的訪问控制台基于VNC的.我们从Horizon进入主机实例的控制台,就是noVNC.我在之前的一篇文章里专门对noVNC也做过測试(http:// ...

  5. Android Studio 的 10 个你非常有可能不知道的技巧

    本文首发:http://prototypez.github.io/2016/04/19/about-10-things-you-probably-didn-t-know-you-could-do-in ...

  6. 撼动 IT 界的十大编程语言【转载+整理】

    提这些的目的是要保持关注最新的技术.如果你是一个程序员,想要探究未来技术,那这篇文章是你的必读之选.这里列出了10种编程语言,它们可能会改变IT界的工作方式. 下面这些语言都有其实际的需求,举例来说, ...

  7. 加快Android Studio的编译速度

    从Eclipse切换到Android Studio后,感觉Android Studio的build速度比Eclipse慢很多,以下几个方法可以提高Android Studio的编译速度 使用Gradl ...

  8. 【高德地图Android SDK】视频教学

    前两天参加了高德在北航举办的公开课,感觉非常不错.完成老师布置的作业之后,还顺利地拿到了高德开发者认证证书!! 现在来跟大家分享一下,如何快速学习[高德地图Android SDK]的开发.一天包会!连 ...

  9. MYSQL判断不存在时创建表或创建数据库

    创建数据库: Create Database If Not Exists MyDB Character Set UTF8 创建数据表: Create Table If Not Exists `worl ...

  10. 忘记MySQL root密码重置MySQL root密码

    (1)停止mysql# /etc/init.d/mysql stop(2)以不检查权限的方式启动# mysqld --skip-grant-tables &(3)登录mysql修改root用户 ...