私はAndroidで地図を作成しており、いくつかのオーバーレイアイコンで地図を覆っています。私の問題は、各オーバーレイのアイコンが静的であり、ズームインおよびズームアウトしたときにマップの残りの部分と一緒にサイズ変更されないことです。これは、ユーザーがズームインまたはズームアウトしすぎて、アイコンが大きすぎたり小さすぎたりすると、厄介になる可能性があります。
私の解決策は、各アイコンのサイズが異なる複数の画像ファイルを作成することです。ただし、:からアイコンを作成した後、(拡張された)MapViewクラスからこれらのアイコンを参照する方法がわかりません。
public class Map extends MapActivity {
...
public onCreate() {
...
//Very simplified copy of my working code:
Drawable defaultDrawable = this.getResources().getDrawable(R.drawable.myicon);
List<Overlay> mapOverlays = mapView.getOverlays();
ItemizedOverlay overlayManager = new OverlayManager(defaultDrawable, this);
OverlayItem myOverlay = new OverlayItem(...);
overlayManager.addOverlay(myOverlay);
}
}
MapView
ズームイベントをトリガーできるようにクラスを拡張しました。この方法では、アイコン置換コードを配置する予定ですが、ここからマップの既存のオーバーレイとdispatchDraw()
そのアイコンにアクセスする方法(およびアイコンのみを変更する方法)がわかりません。
public class ZoomSensitiveMapView extends MapView {
private int oldZoomLevel;
...
public void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
if (getZoomLevel() != oldZoomLevel) {
if (getZoomLevel() > 15) {
//Zoomed in closer
//Replace icons with bigger copies
}
else {
//Zoomed out further
//Replace icons with smaller copies
}
oldZoomLevel = getZoomLevel();
}
}
}
私はgetOverlays()
ここでうまくいくかもしれないと思っていましたが、それはオーバーレイ自体を返すだけで、アイコンは返さないようです。
私は正しい方向に進んでいますか?オーバーレイ座標などを調整せずにアイコンを置き換えるにはどうすればよいですか?ヘルプや推奨事項はここで大歓迎です!(私の説明が十分に明確であることを願っています。そうでない場合は、明確にするように私に依頼してください!)よろしくお願いします!