【发布时间】:2014-09-02 20:03:18
【问题描述】:
这是我非常标准的 onTouchListener 按钮:
b.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) {
b.setPressed(true);
}
if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP) {
b.setPressed(false);
// Do the button action stuff here
}
return true;
}
});
当用户按下按钮时,我将按钮设置为“按下”。当用户抬起手指时,我将按钮设置为“未按下”,然后执行按钮应该执行的操作。
这一切都很好,除了用户按下按钮然后在继续保持手指向下的同时将手指移到按钮区域之外的情况。当手指被抬起时,ACTION_UP 东西无论如何都会运行。我希望这种行为充当按钮按下的“取消”。因此,只要按下的手指移出按钮区域,我就想b.setPressed(false);,然后在手指抬起时不要执行按钮操作。
我尝试过使用MotionEvent.ACTION_CANCEL 和MotionEvent.ACTION_OUTSIDE(如How to detect when finger slides off the ImageButton? 所建议的那样),但我一定错过了一些东西,因为它们不起作用。
从Detect when a user moves off of a button in Android 看来,这可以通过event.getX() 和event.getY() 完成。如果 getX() 为负数,则您不在左侧,如果 getY() 为负,您不在顶部,但要弄清楚您是在右侧还是底部,我必须弄清楚按钮,然后......必须有一个更简单的方法。有吗?
【问题讨论】:
标签: android button ontouchlistener