用于按下和释放按钮的监听器

M'h*_*med 39 android view

如何Button按下并释放时我该怎么听?

sda*_*bet 78

你可以使用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;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • `MotionEvent.ACTION_CANCEL`事件也应当作为按钮释放事件处理(与`ACTION_UP`相同),因为当你按下按钮后执行某些手势时会触发它(在这种情况下不会触发'ACTION_UP`事件). (8认同)

Mat*_*att 6

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

对于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;
    }
});
Run Code Online (Sandbox Code Playgroud)

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

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