. Поскольку onTouch для trueLayoutTop возвращает true, Android отправляет оставшиеся события касания контейнеру компоновки, и в журнале мы видим записи, соответствующие событиям ACTION_MOVE и ACTION_UP. Коснитесь верхней кнопки returns false еще раз — вы у в журнале тот же набор записей. Это значит, что метод onTouch вызван для falseBtnTop, onTouchEvent вызван для falseBtnTop и затем onTouch вызван для trueLayoutTop с остальными событиями. Инфраструктура Android перестает отправлять события кнопке для одной последовательности за раз. Новую последовательность событий касания Android будет посылать кнопке, если только не получит еще один возврат значения false из вызванного метода, что и делается в нашем примере приложения. http://arial-hats.ru/
Теперь коснитесь пальцем на верхнем контейнере компоновки, но не на какой-либо кнопке, и переместите палец немного в сторону, после чего уберите его с сенсорного экрана (при использовании эмулятора сделайте похожее движение мышью). Обратите внимание на поток журнальных сообщений в LogCat, в котором первая запись имеет действие ACTION_DOWN, затем следует множество событий ACTION_MOVE и, наконец, событие ACTION_UP.
Даже после перемещения пальца за пределы кнопки мы продолжаем получать уведомления о событиях касания, относящихся к кнопке. Первая запись . соответствует событию, когда палец уже не находится над кнопкой. В данном случае координата X события касания соответствует правой границе объекта кнопки. Однако вызовы с объектами MotionEvent будут продолжаться до тех пор, пока не будет получено событие ACTION_UP, поскольку метод onTouch продолжает возвращать true. Если, наконец, убрать палец от сенсорного экрана, то даже когда палец не находился на кнопке, метод onTouch по-прежнему вызывается и предоставляет событие ACTION_UP, поскольку мы продолжаем возвращать значение true. Об этом следует помнить, имея дело с MotionEvent. Когда палец передвинут за пределы представления, можно было бы отменить любую выполняющуюся операцию и вернуть false из метода onTouch, чтобы больше не получать уведомлений о будущих событиях. Или же можно продолжить получать события (вернув true из метода onTouch) и выполнить логику, только если палец вернутся обратно в пределы представления. При возврате true из onTouch последовательность событий касания ассоциирована с верхней кнопкой returns true. Это сообщает Android, что поиск объекта для получения объектов MotionEvent можно завершить и просто отправлять все будущие объекты MotionEvent из этой последовательности касания нам. Даже если при перемещении пальца мы встретили другое представление, мы остаемся привязанными к исходному представлению для данной последовательности.
Опубликовал katy
February 17 2015 18:32:51 ·
0 Комментариев ·
2952 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.