【问题标题】:Capture button release in Android在 Android 中捕获按钮释放
【发布时间】:2010-09-24 05:46:20
【问题描述】:

是否可以像使用onClickListener() 和OnClick() 捕获点击一样捕获按钮的释放?

我想在按下按钮时增加按钮的大小,并在释放单击时将其移回原始大小。谁能帮我怎么做?

【问题讨论】:

    标签: android button


    【解决方案1】:

    你应该在你的按钮上设置一个 OnTouchListener。

    button.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                increaseSize();
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                resetSize();
            }
        }
    };
    

    【讨论】:

    • OnTouchListener 只监听触摸对吗?我想听点击和释放。怎么做?
    • 触摸事件向下和向上实际上是一次点击。您还可以在按钮上同时设置 onclicklistener 和 ontouchlistener。
    • 只是想知道为什么 kiki 得到了公认的答案,因为我觉得给出了更准确的答案?
    • 你的代码应该是event.getAction(),否则你会得到一个不兼容的操作数类型错误。我同意这应该是公认的答案,请投赞成票:)
    • 您应该将 event.getAction() == MotionEvent.ACTION_CANCEL 添加到 MotionEvent.ACTION_UP 中。查看文档,它说 ACTION_CANCEL 必须作为 ACTION_UP 处理。我的意思是:如果 (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL)
    【解决方案2】:

    您还必须处理 MotionEvent.ACTION_CANCEL。所以代码将是:

    button.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP || 
                event.getAction() == MotionEvent.ACTION_CANCEL) {
                increaseSize();
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                resetSize();
            }
        }
    };
    

    【讨论】:

      【解决方案3】:

      改用 OnTouchListener 或 OnKeyListener。

      【讨论】:

        【解决方案4】:

        您可以通过覆盖onKeyDown 和onKeyUp 来做到这一点。这些都继承自android.widget.TextView。请参阅android.widget.Button doc 了解更多信息。

        【讨论】:

        • onKeyDown 和 onKeyUp 用于键盘事件,如果我没记错的话。是否可以为它们捕获点击事件?
        【解决方案5】:

        Eric Nordvik 有正确的答案,除了

        event.getAction() == MotionEvent.ACTION_UP
        

        从来没有为我被处决。相反,我确实实现了

            button.setOnClickListener(new OnClickListener() {
                @Override
                public boolean onClick(View v) {
                    resetSize();      
            }
        };
        

        对于触摸 ACTION_UP。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-05
          • 1970-01-01
          • 1970-01-01
          • 2012-10-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多