少し調べた後、次の答えにたどり着きました (このブログのコードを使用してサイズ変更を行いました)。
上記と同じ方法をオーバーライドしましたが、いくつかの違いがあります。
- 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) メソッドは、その名前が示すように、現在のマーカーのデータを取得します。つまり、元のサイズであり、それ以降に成長 (または縮小) した方法ではありません。次の方法が必要です。
- マップの元のサイズを保存する
- (比率)からどのように変化したかを検証する
コメントアウトしたコードは、許可したい最大および最小のサイズ変更を処理します (したがって、マーカーが重なり合うことなく表示され、人間の目には判読可能になります)。
これが役立つことを願っています!