Главная » Разработка для Android » «Оживляем»  Наложения,  размещенные поверх MapView

0

В главе 8 вы научились с помощью Наложений добавлять слои с аннота- циями  поверх элементов  MapView. При этом использовался тот же класс Canvas, что и при создании нестандартных Представлений. Поэтому приме- нив все продвинутые возможности, описанные ранее в этом разделе, можно улучшить и карточные Наложения. Это значит, что вы можете задействовать

любые методы для рисования,  прозрачность,  шейдеры,  цветовые  маски и эффекты,  предоставляемые графическим фреймворком Android,  чтобы создавать визуально богатые и насыщенные  Наложения.

За взаимодействие с сенсорным  экраном  в MapView  отвечает каждое отдельное его Наложение. Чтобы реагировать на нажатия внутри Наложения, переопределите событие onTap.

В листинге 15.22 показана реализация метода onTap, который в качестве параметров принимает координаты нажатия на карте, а также соответствую- щий объект MapView.

Листинг 15.22. Обработка  событий, связанных с нажатиями внутри Наложений

@Override

public boolean onTap(GeoPoint point, MapView map) {

// Получите проекцию для преобразования экранных координат (в обе

// стороны)

Projection projection = map.getProjection();

// Верните true, если мы обработали это событие return [ … проверка на нажатие пройдена … ];

}

Объект MapView  может быть использован при нажатии  на экране для получения проекции  карты. Применяя эту проекцию  в сочетании  с пара- метром GeoPoint, можно определить позицию на экране, соответствующую географическим координатам.

Метод onTap, принадлежащий производным от Overlay классам, должен возвращать  значение  true,  если он действительно обрабатывает  нажатие (и false — если нет). Когда ни одно из Наложений, принадлежащих элемен- ту MapView, не вернуло true, событие нажатия будет обработано самим MapView или Активностью.

Знакомство с SurfaceView

В обычных условиях  Представления из вашего приложения рисуются в едином графическом потоке. Этот главный программный поток также от- вечает за все взаимодействия с пользователем (например, нажатие кнопок или ввод текста).

В главе 9 вы научились перемещать блокирующие операции в фоновые потоки. К сожалению, вы не можете сделать то же самое с методом onDraw из своего Представления, так как изменение элементов графического интер- фейса из фонового потока явно запрещено.

Если вам необходимо  быстро обновить  пользовательский интерфейс Представления или если код для отрисовки  слишком  долго блокирует  гра- фический  поток, применение класса SurfaceView  может стать выходом из положения.  В основе его объект Surface, а не Canvas. Это важно, потому

как Surface поддерживает рисование из фоновых потоков. Данное отличие особенно полезно  для ресурсоемких  операций  или быстрых  обновлений, а также когда необходимо обеспечить высокую частоту изменения кадров (использование трехмерной  графики,  создание игр или предпросмотр ви- деопотока с камеры в режиме реального времени, как продемонстрировано в главе 11).

Возможность  рисовать  вне зависимости от графического  потока ведет к повышенному потреблению памяти. Таким образом, хоть это и полезный (а иногда просто необходимый) способ создания  нестандартных Представ- лений, будьте осторожны, используя его.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии