私の場合と同じ問題を抱えている人にとっては、解決策は実際には非常に簡単です。
あなたがしなければならないのは、このように、OverlayItemの描画可能に境界を設定されている:
Drawable d = myOverlayItem.getMarker(0);
d.setBounds(-xWidth/2, -yWidth/2, xWidth, yWidth);
getMarkerためのパラメータは、実際にoverlayItemの状態に依存しますが、個人的に私のためにすべてのための同じ私の状態は気にしなかったので、0を使用しました。
実際に境界を設定する場所によってソリューションがどのように異なるかはわかりませんが、私はItemizedOverlayサブクラスの描画メソッド内で行いました:
@Override
public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow) {
if (!shadow) {
// Do your projection calculations here, if necessary
for (int i = 0; i < mOverlays.size(); i++) {
Drawable d = mOverlays.get(i).getMarker(0);
d.setBounds(-width/2, -height/2, width/2, height/2);
}
}
super.draw(canvas, mapView, shadow);
}
オーバーレイアイテムの境界は0,0から始まり、実際にはオーバーレイアイコンの左上にキャンバスが移動することに注意してください。私の例では、幅を50に設定し、高さを50に設定すると、オーバーレイアイテムは、オーバーレイアイテムのコンストラクタで設定された定義位置を中心としたマップに描画されます。あなたは、オーバーレイのソースにこの出来事を見ることができます:
protected static void drawAt(Canvas canvas, Drawable drawable, int x, int y, boolean shadow)
{
// .... Do Stuff ....
canvas.save();
canvas.translate(x, y);
// .... Do Stuff ....
drawable.draw(canvas);
// .... Do Stuff ....
canvas.restore();
}
(それはcanvas.translate呼び出しで起こる)
誰かがhere's the full source for Overlayを気にすることをオフのチャンスに。
(マップエンジニアのリバースエンジニアリングには多くの労力がかかりましたので、私の努力を最大限に引き出すことができます)