Перетаскивание по кнопке Android

1

Я бы хотел, чтобы кнопка андроида запускалась, если пользователь перетаскивает ее и отпускает на нее пальцем в дополнение к стандартной активации, если она нажата и отпущена.

Я пытался использовать 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;
            }
        });
Теги:

2 ответа

1

ACTION_OUTSIDE может быть запущен только тогда, когда зона касания расширена ViewRoot.

Если вы думаете о перетаскивании, у вас есть 2 варианта, но для них вы можете обнаружить прямоугольник, где ваша кнопка расположена на экране View.getHitRect(Rect), а затем, основываясь на этом знании, вы можете решить, что MotionEvent находится внутри Прямо или нет.

В противном случае вы можете создать DragLayer и реализовать там всю логику.

  • 0
    спасибо, я попробую. Я не понимаю, что вы подразумеваете под "расширением ViewRoot". Вы пытаетесь сказать, что ACTION_OUTSIDE - это то, что Android использует внутри себя, а пользователь фреймворка не должен использовать?
  • 1
    есть метод, который позволяет вашему представлению иметь большую площадь касания, чем реальный размер. На самом деле это событие не означает, что вы выходите за пределы своего прямоугольника попадания.
Показать ещё 1 комментарий
0

Вы можете попробовать попробовать Gesture Listener. Существует довольно хорошее описание того, как его использовать здесь.

Кажется, вам нужно расширить Button и добавить возможности для обнаружения жестов, чтобы выполнить это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню