Из-за того, что метод onTouchEvent вызывает одноименный метод родительского класса, кнопка изменяет цвет, отражая свое нахождение на полпути в нажатое состояние. И снова кнопка останавливается на этом пути, поскольку никогда не получит события ACTION_UP в данной последовательности касания из-за того, что наши методы все время возвращают значение false. Но в отличие от предыдущей ситуации, в получении этого события не заинтересован даже контейнер компоновки. Если вы коснетесь нижней кнопки returns false, нажмете ее и затем переместите палец, никаких дополнительных записей в LogCat не появится, т.к. объекты MotionEvent больше отправляться не будут. Мы всегда возвращаем значение false, поэтому Android не будет посылать никаких дополнительных событий из данной последовательности касания. Начав новую последовательность касания, можно будет увидеть новые записи в LogCat. Если инициировать последовательность касания в контейнере кнопки, а не на самой кнопке, в LogCat будет присутствовать одиночное событие для кнопки falseLayoutBottom, которая возвращает false, и ничего после этого (если только не начать новую последовательность касания).
До сих пор для демонстрации эффектов от событий MotionEvent сенсорных экранов применялись кнопки. Следует отметить, что обычно логика, связанная с кнопками, реализуется в методе onClick. Кнопки в рассмотренном примере использовались из-за того, что их просто создавать, и потому, что они являются подклассами View, таким образом, получая события касания подобно любому другому представлению. Помните,
что эти приемы применимы к любому объекту View в приложении, будь он стандартным или специальным классом.
Удаление объектов MotionEvent
Просматривая документацию Android, вы могли обратить внимание на метод recycle класса MotionEvent. Удаление объектов MotionEvent, получаемых onTouch или onTouchEvent, может показаться заманчивым, но делать этого не следует. Если ваш метод обратного вызова не потребляет объект MotionEvent и возвращает false, этот объект, скорее всего, будет передан какому-то другому методу, представлению или активности, поэтому удалять его нежелательно. Даже если событие было потреблено с возвратом true, объект события вам не принадлежит, поэтому удаляться он не должен.
В классе MotionEvent имеется несколько вариаций метода по имени obtain. Они предназначены для создания копии MotionEvent или совершенно нового объекта MotionEvent. Полученная подобным образом копия или новый объект события должен быть удален по завершению работы с ним. Например, если необходимо привязаться к объекту события, который был передан через обратный вызов, следует вызвать obtain для создания его копии, т.к. после http://bigtoyshop.ru/dolls/baby-born/baby-born-kukla-zimnie-priklyucheniya-interaktivnaya-43-cm.htmlвозврата из обратного вызова объект события будет удален Android, и попытки его дальнейшего использования могут привести к непредсказуемым результатам. По завершении работы со своей копией на ней вызывается метод recycle.
Опубликовал katy
February 17 2015 18:34:46 ·
0 Комментариев ·
3280 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.