На заметку! В конце будет дан URL-адрес, по которому можно загрузить проекты, рассмотренные в, и затем импортировать их непосредственно в Eclipse. В тексте будет приводиться только код, иллюстрирующий концепции. Для получения рабочего примера приложения понадобится загрузить проект для данной.
Первый пример приложения в этой называется TouchDragDemo. В настоящем разделе мы рассмотрим два ключевых файла:
/res/layout/main.xml
/src/com/androidbook/touch/dragdemo/Dot.java
Файл main.xml содержит компоновку для приложения, демонстрирующего перетаскивание. Содержимое этого файла о . Некоторые из ключевых концепций, которые следует отметить, касаются использования FrameLayout в качестве контейнера верхнего уровня, внутри которого находится контейнер LinearLayout, содержащий элементы TextView и специальный класс View по имени Dot. Поскольку LinearLayout и Dot сосуществуют в рамках FrameLayout, их позиции и размеры на самом деле не влияют друг на друга, однако они будут разделять свободное пространство экрана, располагаясь друг над другом. Пользовательский интерфейс этого приложения показан.
Обратите внимание, что имя пакета в XML-файле компоновки для элемента Dot должно совпадать с именем пакета, используемого для вашего приложения. Как упоминалось ранее, компоновка Dot отделена от LinearLayout. Причина в том, что нам нужна свобода перемещения точки по экрану; именно потому атрибуты layout_width и layout_height установлены в "fill_parent". Когда точка рисуется на экране, она должна быть видна, и если ограничить размеры представления точки диаметром этой точки, то ее не будет возможности увидеть при перетаскивании от исходной позиции.
На заметку! Формально можно было бы установить android:clipChildren в true в дескрипторе FrameLayout и выбрать для ширины и высоты контейнера компоновки точки вариант wrap_content, но такое решение не выглядит очевидным.
Каждый счетчик размещается с фоном, отступами, полями и тяготением, которые обеспечивают его отображение по правой стороне экрана. Мы начинаем с нулевых значений счетчиков, но вскоре вы у, что по мере перетаскивания поверх них точек эти значения будут инкрементироваться. Хотя в рассматриваемом примере применяются элементы TextView, в качестве цели перетаскивания можно было бы использовать практически любой объект View. А теперь посмотрим на Java-код класса Dot, . http://zonacomforta.com/garderobnyie/free-style/garderobnaya-komnata-iz-dsp-2/
Запустив это приложение, вы у белую точку на синем фоне. Можете коснуться точки и перетащить ее в рамках экрана. Когда вы уберете палец от экрана, точка останется на своем месте до тех пор, пока вы снова ее не коснетесь и перетащите куда- то в другое место. Метод draw помещает точку в ее текущую позицию с указанным левым верхним углом, скорректированную согласно радиусу точки. За счет получения объектов MotionEvent в методе onTouchEvent мы можем модифицировать позицию левого верхнего угла на величину перемещения при касании.
Поскольку пользователь не всегда касается в точности центра объекта, координаты касания не будут совпадать с координатами местоположения объекта. В этом и состоит назначение смещения: получить координаты левого верхнего края точки из позиции касания. Но еще до начала операции перетаскивания нам нужно удостовериться в том, что пользователь коснулся достаточно близко к точке. Если пользователь касается экрана далеко от точки, что формально находится внутри компоновки представления точки, то последовательность перетаскивания начинаться не должна. Именно поэтому мы смотрим, произведено ли касание внутри самой белой точки; если нет, мы просто возвращаем false, что препятствует получению любых других событий касания в данной последовательности касания.
Когда палец начинает перемещаться по экрану, мы уточняем местоположение объекта с использованием небольших изменений координат x и у из получаемых экземпляров MotionEvent. Когда перемещение останавливается (ACTION_UP), местоположение финализируется на основе координат последнего касания. В этом примере мы не должны заботиться о полосах прокрутки, которые могли бы затруднить вычисление позиции объекта на экране. Однако базовые принципы остаются теми же самыми. Зная начальное местоположение перемещаемого объекта, и также отслеживая значения изменений координат касания через диапазон действий с ACTION_DOWN до ACTION_UP, мы можем уточнять местоположение объекта на экране.
Опубликовал katy
February 17 2015 19:01:03 ·
0 Комментариев ·
2826 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.