Лучшие 2 ответа хороши, за исключением случаев, когда представление находится внутри вида прокрутки: когда прокрутка происходит, потому что вы двигаете пальцем, она все равно регистрируется как событие касания, но не как событие MotionEvent.ACTION_MOVE.Итак, чтобы улучшить ответ (который необходим, только если ваш взгляд находится внутри элемента прокрутки):
private Rect rect; // Variable rect to hold the bounds of the view
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
// Construct a rect of the view's bounds
rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
} else if(rect != null && !rect.contains(v.getLeft() + (int) event.getX(), v.getTop() + (int) event.getY())){
// User moved outside bounds
}
return false;
}
Я проверял это на Android 4.3 и Android 4.4
Я не заметил ни одногоРазличия между ответом Морица и топ-2, но это касается и его ответа:
private Rect rect; // Variable rect to hold the bounds of the view
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
// Construct a rect of the view's bounds
rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
} else if (rect != null){
v.getHitRect(rect);
if(rect.contains(
Math.round(v.getX() + event.getX()),
Math.round(v.getY() + event.getY()))) {
// inside
} else {
// outside
}
}
return false;
}