Я бы хотел, чтобы кнопка андроида запускалась, если пользователь перетаскивает ее и отпускает на нее пальцем в дополнение к стандартной активации, если она нажата и отпущена.
Я пытался использовать 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;
}
});
ACTION_OUTSIDE может быть запущен только тогда, когда зона касания расширена ViewRoot.
Если вы думаете о перетаскивании, у вас есть 2 варианта, но для них вы можете обнаружить прямоугольник, где ваша кнопка расположена на экране View.getHitRect(Rect), а затем, основываясь на этом знании, вы можете решить, что MotionEvent находится внутри Прямо или нет.
В противном случае вы можете создать DragLayer и реализовать там всю логику.
Вы можете попробовать попробовать Gesture Listener. Существует довольно хорошее описание того, как его использовать здесь.
Кажется, вам нужно расширить Button и добавить возможности для обнаружения жестов, чтобы выполнить это.