聆听者按下并释放按钮
您可以使用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'事件未被触发在这种情况下)。 – user2137020 2016-01-09 20:18:23
如果有人想知道,在常规视图中,这些不符合'ACTION_BUTTON_PRESS'和'ACTION_BUTTON_RELEASE'。认为这两个可能包含“DOWN”,“UP”和“CANCEL”动作。 – 2016-11-16 08:27:16
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
时也能得到后续事件。
检查onTouchListiner – vinaykumar 2012-08-02 14:04:08