【发布时间】:2014-01-31 04:02:58
【问题描述】:
我有一个按钮,我正在按下按钮进行动画处理。我希望它在拖到某个阈值之外后恢复到“正常”状态。
我在ACTION_DOWN 上创建了一个视图边界矩形,并检查它是否超出ACTION_MOVE 的触摸区域。我成功检测到“越界”触摸,但我无法让视图停止监听触摸。就像它忽略了我的 animateToNormal() 方法。
我尝试将布尔返回值更改为 true 而不是 false,但没有帮助。我还尝试在ACTION_MOVE 案例中删除触摸侦听器(设置为空),但我需要重新附加以继续侦听触摸。我想我可以在添加回来之前添加任意延迟,但这似乎是一个可怕的黑客攻击。
我正在 4.2 设备 (LG G2) 上对此进行测试。
private static class AnimationOnTouchListener implements View.OnTouchListener {
private Rect rect;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch(motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
rect = new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
animatePressed();
return false;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
// back to normal state
animateBackToNormal();
return false;
case MotionEvent.ACTION_MOVE:
if(!rect.contains(view.getLeft() + (int) motionEvent.getX(), view.getTop() + (int) motionEvent.getY())){
d(TAG, "out of bounds");
animateBackToNormal();
// STOP LISTENING TO MY TOUCH EVENTS!
} else {
d(TAG, "in bounds");
}
return false;
default:
return true;
}
}
【问题讨论】:
-
有趣的是,我有相反的问题。我想继续获取事件,但我没有。 stackoverflow.com/questions/34908569/…
标签: android android-animation ontouchlistener