После небольшого осмотра я придумал следующий ответ (для изменения размера я использовал код из этого блога ).
Я перебил тот же метод, что и выше, с некоторыми отличиями:
- Вместо метода drawCircle я использовал метод drawBitmap
- Я не использовал объект Paint
- Я перебрал элементы наложения, чтобы изменить размер маркеров
Это заканчивается так:
for(OverlayItem currentPoint:mOverlays){
geopoint =currentPoint.getPoint();
Point point = new Point();
projection.toPixels(geopoint, point);
BitmapDrawable bitDraw= ((BitmapDrawable)currentPoint.getMarker(0));
Drawable currentMarker = currentPoint.getMarker(0);
/*if (currentMarker!=null){
if (currentWidthRatio<.6f) {
currentWidthRatio = .6f;
}
else if (currentWidthRatio>1.5f) {
currentWidthRatio = 1.5f;
}
}*/
if (bitDraw!=null){
Bitmap bitmap = getResizedBitmap(bitDraw.getBitmap(),(int)(currentMarker.getIntrinsicHeight() * currentWidthRatio),
(int)(currentMarker.getIntrinsicWidth()*currentWidthRatio));
canvas.drawBitmap(bitmap,
point.x - bitmap.getHeight()/2,
point.y - bitmap.getWidth()/2, null);
}else{
Log.println(Log.DEBUG,"non-existent point", "");
}
}
Осторожно, хотя! Метод currentPoint.getMarker (0) получает, как следует из его названия, данные текущего маркера. Это означает, что у вас есть его оригинальный размер, а не то, как он вырос (или уменьшился) с тех пор. Вы должны иметь какой-то метод:
- хранить оригинальный размер карты
- проверить, как оно изменилось с (соотношение)
Код, который я закомментировал, обрабатывает максимальное и минимальное изменение размера, которое я хочу разрешить (чтобы маркеры были видны без наложения / оставались разборчивыми для человеческого глаза).
Надеюсь, это поможет!