さまざまなマーカーが付いたMapViewがあります。MapActivityに初めて入るときに、マーカーに設定されたドローアブルの境界を設定しましたが、すべてが正常に表示されます。マーカーと影はすべて正しく表示されます。しかし、別のアクティビティをクリックして戻ると、シャドウまたはマーカーが正しくバインドされなくなります。影響を受けるマーカーの一部だけである場合もあります。ここで何が起こっているのか誰か教えてもらえますか?ここにいくつかのコードがあります。以下は、マーカードローアブルの境界を設定する場所です。
InputStream is = assetManager.open(imageName);
drawable = Drawable.createFromStream(is, null);
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
drawable.setBounds(-width / 2, -height, width - (width / 2), 0);
そして、これがオーバーレイアイテムを作成/マップに追加する方法です:
GeoPoint point = createGeoPoint(lat, lon);
OverlayItem overlayItem = new OverlayItem(point, character.get_id(), "");
Drawable image = drawable;
overlayItem.setMarker(image);
itemizedOverlay.addOverlay(overlayItem);
私の知る限り、オーバーレイはマップに再追加されていません。これは、onResume()イベントの後に再描画するだけです。何か案は?
更新:私は実際に理解しました。タップされたタイプの画像のみが移動し、影ではなく、移動する画像です。したがって、タイプAの画像がx個、タイプBの画像がy個あり、タイプAの画像をタップすると、MapActivityに戻ると、タイプAのすべての画像の影がずれますが、タイプのすべての画像はBはまだ適切に配置されています。
別の更新:境界をログに出力していますが、マップ画面に戻った後に境界が変更されていることを確認します。マーカーが最初に追加されたとき、その境界は次のとおりです。
[Rect(-25、-48-25、1)]
しかし、マップ画面に戻ると、境界は次のように変更されました。
[Rect(0、0 --50、49)]
...なぜこれになるのでしょうか?
さらに別の更新:回避策があります...しかし、なぜこれが発生しているのかについての回答が必要です。回避策は、drawメソッドをオーバーライドし、drawメソッドが呼び出されるたびに境界を(中央の下部に)設定することです。コードは次のとおりです。
@Override
public void draw(Canvas canvas) {
int dWidth = getIntrinsicWidth();
int dHeight = getIntrinsicHeight();
setBounds(-dWidth / 2, -dHeight, dWidth / 2, 0);
super.draw(canvas);
}