Главная » Разработка для Android » Рисование на Наложении с помощью Холста

0

Чтобы рисовать на Наложении с помощью Холста, нужно переопределить обработчик draw, принадлежащий объекту Overlay.

Объект Canvas, передающийся в этот метод, выступает  поверхностью, на которой вы будете рисовать  свои аннотации.  Применяется та же мето- дика, что и при создании  нестандартных пользовательских интерфейсов для Представлений, с которыми вы познакомились в главе 4. Объект Canvas включает  методы для рисования двумерных  примитивов на вашей карте (в том числе линии, текст, различные фигуры, эллипсы, изображения и т. д.). Используйте объект Paint,  чтобы определить  стили и цвета.

В листинге 8.10 используется проекция для отрисовки текста и эллипса поверх заданной местности.

Листинг 8.10. Простое Наложение на карте

@Override

public void draw(Canvas canvas, MapView mapView, boolean shadow) { Projection projection = mapView.getProjection();

Double lat = -31.960906*1E6; Double lng = 115.844822*1E6;

GeoPoint geoPoint = new GeoPoint(lat.intValue(), lng.intValue());

if (shadow == false) {

Point myPoint = new Point();

projection.toPixels(geoPoint, myPoint);

// Создайте и настройте вашу кисть для рисования

Paint paint = new Paint(); paint.setARGB(250, 255, 0, 0); paint.setAntiAlias(true); paint.setFakeBoldText(true);

// Создайте окружность int rad = 5;

Продолжение ?

Листинг 8.10 (продолжение)

RectF oval = new RectF(myPoint.x-rad, myPoint.y-rad, myPoint.x+rad, myPoint.y+rad);

// Нарисуйте на Холсте текст и эллипс canvas.drawOval(oval, paint);

canvas.drawText("Red Circle", myPoint.x+rad, myPoint.y, paint);

}

}

ПРИМЕЧАНИЕ

Если вам нужны более продвинутые функции для рисования, смотрите главу 11 — в ней описаны градиенты, начертания и фильтры.

Обработка нажатий на карте

Чтобы обрабатывать  нажатия  на карте (пользовательские нажатия), пе- реопределите  обработчик onTap внутри наследованного от Overlay класса.

Обработчик onTap принимает  два параметра:

объект  GeoPoint, который  содержит  широту/долготу нажатой точки;

объект MapView,  после нажатия  на который  сгенерировалось это событие.

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

Листинг 8.11. Обработка  нажатий на карте

@Override

public boolean onTap(GeoPoint point, MapView mapView) {

// Perform hit test to see if this overlay is handling the click if ([ . . . выполнить проверку нажатия  . . . ]) {

[ . . . выполнить обработку нажатия . . . ]

return true;

}

// Если обрабатывать не нужно, верните false return false;

}

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

По теме:

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