如何检测触摸是否在自定义 Android 视图之上释放?
How to detect if touch is released on top of custom Android view?
当我的视图处于按下状态并且触摸事件的位置离开视图时,我希望视图得到通知。我也想在触摸位置重新进入我的视图时收到通知,同时仍处于按下状态。
我的视图扩展了 View
,目前实现了这个方法:
public boolean onTouchEvent(MotionEvent event) {
boolean result = gestureDetector.onTouchEvent(event);
if (!result) {
if (event.getAction() == MotionEvent.ACTION_UP) {
animate().scaleX(1).scaleY(1).setDuration(100).start();
performClick();
}
}
return result;
}
gestureDetector
指的是这个类的一个实例:
class GestureListener extends GestureDetector.SimpleOnGestureListener {
public boolean onDown(MotionEvent e) {
animate().scaleX(0.9f).scaleY(0.9f).setDuration(100).start();
return true;
}
}
这很好用,但是当在我的视野之外按下并释放触摸时,MotionEvent.ACTION_UP
仍然会被触发(因此 performClick()
也会),这不是我的行为我在找。我在 MotionEvent
中尝试了许多其他操作,但没有任何效果。
有什么想法吗?
更改您的 if 语句以包含按钮的尺寸
boolean inX == event.getX() >= myButton.getX() && event.getX() <= myButton.getX()+myButton.getWidth();
boolean inY == event.getY() >= myButton.getY() && event.getY() <= myButton.getY()+myButton.getWidth();
if (event.getAction() == MotionEvent.ACTION_UP && inX && inY) {
// do cool stuff
当我的视图处于按下状态并且触摸事件的位置离开视图时,我希望视图得到通知。我也想在触摸位置重新进入我的视图时收到通知,同时仍处于按下状态。
我的视图扩展了 View
,目前实现了这个方法:
public boolean onTouchEvent(MotionEvent event) {
boolean result = gestureDetector.onTouchEvent(event);
if (!result) {
if (event.getAction() == MotionEvent.ACTION_UP) {
animate().scaleX(1).scaleY(1).setDuration(100).start();
performClick();
}
}
return result;
}
gestureDetector
指的是这个类的一个实例:
class GestureListener extends GestureDetector.SimpleOnGestureListener {
public boolean onDown(MotionEvent e) {
animate().scaleX(0.9f).scaleY(0.9f).setDuration(100).start();
return true;
}
}
这很好用,但是当在我的视野之外按下并释放触摸时,MotionEvent.ACTION_UP
仍然会被触发(因此 performClick()
也会),这不是我的行为我在找。我在 MotionEvent
中尝试了许多其他操作,但没有任何效果。
有什么想法吗?
更改您的 if 语句以包含按钮的尺寸
boolean inX == event.getX() >= myButton.getX() && event.getX() <= myButton.getX()+myButton.getWidth();
boolean inY == event.getY() >= myButton.getY() && event.getY() <= myButton.getY()+myButton.getWidth();
if (event.getAction() == MotionEvent.ACTION_UP && inX && inY) {
// do cool stuff