Основы перетаскивания в Android. и последующих версиях
В самом своем базовом варианте операция перетаскивания начинается с того, что некоторое представление заявляет о начале перетаскивания; после этого все заинтересованные стороны наблюдают за происходящим перетаскиванием до тех пор, пока не возникнет событие сбрасывания. Если представление перехватывает событие сбрасывания и желает получить его, это значит, что операция перетаскивания произошла. При отсутствии представлений для получения сбрасывания или если представление, которое получило сбрасывание, отказывается от него, это значит, что сбрасывание не произошло. Взаимодействие во время перетаскивания предполагает использование объекта DragEvent, который передается всем доступным слушателям перетаскивания.
Внутри объекта DragEvent имеются дескрипторы для представления большого объема информации, зависящей от инициатора последовательности перетаскивания. Например, объект DragEvent может содержать объектные ссылки на сам инициатор, информацию о состоянии, текстовые данные, указатели URI или на любые другие данные, которые необходимо передать через последовательность перетаскивания.
Может передаваться информация, которая является результатом динамических коммуникаций между представлениями; однако источник данных в объекте DragEvent ус
танавливается при его создании и впоследствии остается неизменным. В дополнение к этим данным объект DragEvent содержит значение действия, указывающее на то, что происходит в последовательности перетаскивания, и сведения о местоположении, отражающие место на экране, где выполняется перетаскивание.
Объект DragEvent поддерживает шесть возможных действий, которые перечислены ниже.
ACTION_DRAG_STARTED указывает на начало новой последовательности перетаскивания.
ACTION_DRAG_ENTERED указывает, что перетаскиваемый объект перемещен внутрь границ определенного представления.
ACTION_DRAG_LOCATION указывает, что перетаскиваемый объект перемещен в новую позицию на экране.
ACTION _ DRAG _ EXITED указывает, что перетаскиваемый объект перемещен за пределы границ определенного представления.
ACTION_DROP указывает, что пользователь отпустил перетаскиваемый объект. Конкретную реакцию на сбрасывание определяет получатель этого события.
ACTION_DRAG_ENDED сообщает всем слушателям представлений о том, что предыдущая последовательность перетаскивания завершена. Метод DragEvent. getResult возвращает признак успешности операции.
Может показаться, что слушатели перетаскивания должны быть настроены для каждого представления, которое может принимать участие в последовательности перетаскивания; однако на самом деле слушатель перетаскивания можно определить для чего-то одного в приложении, и он будет получать все события перетаскивания для всех представлений в системе. Это может несколько усложнить ситуацию, т.к. слушатель перетаскивания не обязательно должен быть ассоциирован с каким-либо перетаскиваемым объектом или целью сбрасывания. Слушатель может полностью координировать перетаскивание.
На самом деле, если просмотреть проект с примером перетаскивания, входящий в состав Android SDK, легко заметить, что в нем слушатель устанавливается на элементе TextView, который не имеет никакого отношения к действительному перетаскиванию. В проекте, который вскоре будет рассмотрен в качестве примера, используются слушатели перетаскивания, привязанные к конкретным представлениям. Каждый такой слушатель перетаскивания получает объект DragEvent для событий, возникающих в последовательности перетаскивания. Это значит, что представление может получить объект DragEvent, который может быть проигнорирован, потому что относится к другому представлению. Это также означает, что слушатель перетаскивания должен определять такую ситуацию в коде, для чего в объекте DragEvent должен содержаться достаточный объем информации.
Опубликовал katy
February 17 2015 19:06:25 ·
0 Комментариев ·
3052 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.