【问题标题】:listener for pressing and releasing a button按下和释放按钮的监听器
【发布时间】:2012-07-31 12:28:46
【问题描述】:

Button 被按下和释放时如何监听?

【问题讨论】:

    标签: android view


    【解决方案1】:

    fiddler 给出的答案对于通用视图是正确的。

    对于Button,您应该从触摸处理程序返回false总是

    button.setOnTouchListener(new View.OnTouchListener() {      
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    // PRESSED
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                    // RELEASED
                    break;
            }
            return false;
        }
    });
    

    如果您返回true,您将绕过按钮的常规触摸处理。这意味着您将失去按下按钮和触摸波纹的视觉效果。此外,Button#isPressed() 将在实际按下按钮时返回 false

    按钮的常规触摸处理将确保您即使在返回false时也能获得后续事件。

    【讨论】:

      【解决方案2】:

      您可以使用onTouchListener

      view.setOnTouchListener(new View.OnTouchListener() {        
          @Override
          public boolean onTouch(View v, MotionEvent event) {
              switch(event.getAction()) {
                  case MotionEvent.ACTION_DOWN:
                      // PRESSED
                      return true; // if you want to handle the touch event
                  case MotionEvent.ACTION_UP:
                      // RELEASED
                      return true; // if you want to handle the touch event
              }
              return false;
          }
      });
      

      【讨论】:

      • MotionEvent.ACTION_CANCEL 事件也应作为按钮释放事件处理(与ACTION_UP 相同),因为在按下按钮后执行某些手势时会触发它(ACTION_UP 事件不会触发本例)。
      • 如果有人想知道,在常规视图中,这些不对应于 ACTION_BUTTON_PRESSACTION_BUTTON_RELEASE。认为这两个可能包含DOWNUPCANCEL 操作。
      • 但这会阻止onClickListener
      • 如果您正在消费该事件,您还应该在视图上调用 performClick()。
      • @KonstantinKonopko 如果需要,您可以在ACTION_UP 的情况下添加v.performClick(),或者只添加return false
      【解决方案3】:

      onTouchListener 就是你要找的东西。

      您需要使用正确的MotionEvent

      这将允许您处理不同类型的“触摸”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        • 2021-02-15
        • 1970-01-01
        相关资源
        最近更新 更多