我想要一个Android按钮被触发,如果用户拖动它并在标准激活之外释放他的手指,如果它被点击并释放。
我试图使用ACTION_MOVE MotionEvent,但此事件仅在ACTION_DOWN和ACTION_UP事件之间触发。我也认为ACTION_OUTSIDE可能是一个解决方案。有没有办法做到这一点?
这是我的代码,其中删除的操作被删除(b是一个按钮):
b.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()== MotionEvent.ACTION_DOWN){
//Tiggers correctly
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
//Triggers correctly between events, but not when the finger is dragged ontop outside of the element
} else if (event.getAction() == MotionEvent.ACTION_OUTSIDE){
//Can't get this to trigger in any case but I think it might be the solution
} else if (event.getAction() == MotionEvent.ACTION_UP){
//Triggers correctly
}
}
return false;
}
});
答案 0 :(得分:1)
只有在ViewRoot扩展了您的触控区域时才能触发ACTION_OUTSIDE。
如果你考虑拖动,你有2个选项,但是对于它们两个你可以检测到矩形,你的按钮位于屏幕上View.getHitRect(Rect)然后,根据这些知识,你可以决定是否有MotionEvent在里面是否是矩形。
否则,您可以创建DragLayer并在那里实现所有逻辑。
答案 1 :(得分:0)
您可能想尝试一下Gesture Listener。有关如何使用它的相当好的描述here。
似乎您需要扩展Button并为手势检测添加可能性以实现此目的。