43

Button按下并释放a 时如何收听?

4

3 回答 3

88

您可以使用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;
    }
});
于 2012-08-02T14:07:15.650 回答
10

提琴手给出的答案对于通用视图是正确的。

对于 a 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

于 2018-01-24T15:10:23.203 回答
4

onTouchListener就是你要找的。

您将需要使用正确的MotionEvent.

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

于 2012-08-02T14:07:22.610 回答