【发布时间】:2012-07-31 12:28:46
【问题描述】:
当Button 被按下和释放时如何监听?
【问题讨论】:
当Button 被按下和释放时如何监听?
【问题讨论】:
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时也能获得后续事件。
【讨论】:
您可以使用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_PRESS 和 ACTION_BUTTON_RELEASE。认为这两个可能包含DOWN、UP 和CANCEL 操作。
onClickListener
ACTION_UP 的情况下添加v.performClick(),或者只添加return false。
【讨论】: