Главная » Разработка для Android » Создание и использование Наложений

0

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

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

Создание новых Наложений

Каждое Наложение — Холст с прозрачным фоном, который наслаивается на MapView и используется для обработки событий при нажатии.

Для добавления Наложения создайте новый класс, наследующий Overlay. Переопределите метод draw, чтобы нарисовать  аннотации,  которые хотите внести. Переопределите обработчик onTap, чтобы реагировать на нажатия (происходит, когда пользователь нажимает  на аннотации,  добавленные данным Наложением).

В листинге 8.8 показан каркас для создания нового Наложения, которое может рисовать аннотации  и обрабатывать  пользовательские нажатия.

Листинг 8.8. Создание нового Наложения

import android.graphics.Canvas;

import com.google.android.maps.MapView;

import com.google.android.maps.Overlay;

public class MyOverlay extends Overlay {

@Override

public void draw(Canvas canvas, MapView mapView, boolean shadow) {

if (shadow == false) {

[ . . . Рисуем аннотации на главном слое карты . . . ]

}

else {

[ . . . Рисуем аннотации на затененном слое . . . ]

}

}

@Override

public boolean onTap(GeoPoint point, MapView mapView) {

// Верните true, если нажатие на экран обрабатывается данным Наложением return false;

}

}

Знакомство с проекциями

Холст для рисования аннотаций  на Наложении  — это обычный  объект Canvas, видимая поверхность экрана. Чтобы добавить аннотации, основан- ные на физическом местоположении, нужно преобразовать географические точки в экранные координаты.

Класс Projection позволяет переводить значения широты/долготы (хра- нятся в объекте GeoPoint) в координаты пиксела на экране (хранятся в виде объекта Point).

Проекция карты может меняться  при перерисовке,  поэтому желатель- но каждый  раз получать  новый  экземпляр проекции.  Вызовите  метод getProjection, чтобы получить проекцию для MapView.

Projection projection = mapView.getProjection();

Используйте методы fromPixel  и toPixel,  чтобы переводить  GeoPoint в Point  и наоборот.

Для повышения производительности лучше передавать в метод toPixel объект Point с последующим его заполнением (а не получать возвращаемое значение), как показано в листинге 8.9.

Листинг 8.9. Использование проекций

Point myPoint = new Point();

// В координаты экрана projection.toPixels(geoPoint, myPoint);

// В географические координаты GeoPoint projection.fromPixels(myPoint.x, myPoint.y);

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

По теме:

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