zoukankan      html  css  js  c++  java
  • 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;
                }
            });
  • 相关阅读:
    谈谈软件的开发及成长历程
    Winform开发框架之简易工作流设计
    如何快速开发树形列表和分页查询整合的WInform程序界面
    邮件代收代发功能模块的操作界面设计和阶段性总结
    基于Lumisoft.NET组件的SMTP账号登陆检测
    Winform开发的界面处理优化
    基于DevExpress开发的GridView如何实现一列显示不同的控件类型
    Winform里面的缓存使用
    分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码
    算法 dfs —— 将二叉树 先序遍历 转为 链表
  • 原文地址:https://www.cnblogs.com/yejiurui/p/3770714.html
Copyright © 2011-2022 走看看