3

まず第一に、私はここで多くのコードを継承しましたが、この動作の理由を探して何度か調べましたが、困惑しています。

ばかげているように見えても、最後にタップさOverlayItemれたものが残りの上にあることを望みます。私が見ているのは、MapViewがアニメーション化されている間 (を中央に配置するためOverlayItem)、まさに私が望むことを行い、完了すると、「選択したもの」が再び背景にジャンプすることです。

これはデフォルトの動作ですか? または、これをすべてジャンクしている私のコードに何かがありますか?

アニメーション中:

ここに画像の説明を入力

アニメーションのセンタリングが完了したら:

ここに画像の説明を入力

これを修正する方法はいくつかあります (メソッドで選択OverlayItemした自分自身を描画draw()するか、選択したものが最後に描画されるようにする) が、この状況で人々は何をしますか? それとも、元に戻す必要があるコードの奥深くにある単なるバグですか?

4

2 に答える 2

1

特定のことに焦点を当てると、OverlayItemそれが前面に出てくると思います。何かのようなもの:

    myItemizedOverlay.setFocus(overlayItem);

これで、ずっとアイテムの順番で遊んでいる必要がなくなります。

--編集済み--

//Define this class level field
private Handler mHandler = new Handler();

//Use this after starting animation
mHandler.postDelayed(new Runnable() {

    @Override
    public void run() {
        myItemizedOverlay.setFocus(overlayItem);
        mapView.invalidate();  
    }
}, 500);

よろしく。

于 2012-12-15T04:11:24.487 に答える
0

編集: ItemizedOverlay.setFocus(item)は、単一のアイテムを上に描画する方法のようです ( の後mapview.invalidate())。mapviewアニメートするとフォーカスが削除され、描画順序が元に戻るため 、思い通りに動作させることができません。

Android Mapviewに感謝します: 複数のタイプの OverlayItems の順序を制御しますか? 描画順序の動作を指摘してくれて。

今のところ、これは私の手間のかかる解決策です。OverlayItemをオーバーライドgetIndexToDrawすることで、 が表示される順序を完全に制御できますItemizedOverlay

protected int getIndexToDraw(final int drawingOrder)

drawingOrderパラメータは、 に渡されたパラメータと同じインデックスですcreateItem。マーカーが描画される順序を返します (数字が大きいほど後で描画されます。これは「上に」という意味です)。

私の特定のケースでは、ArrayListソートするアイテムがあり、選択したアイテムOverlayItemが常にリストの最後になるようにします。次に、私のgetIndexToDraw方法は次のようになります。

@Override
protected int getIndexToDraw(final int drawingOrder)
{
    return drawingOrder;
}

OverlayItemsに保存したのと同じ順序でを描画するためArrayList

于 2012-12-15T04:39:01.867 に答える