0

の一部のアルファチャネルを変更しようとしてOverlayItemsItemizedOverlayます。はItemizedOverlayAndroidのMapViewに追加されます。

このコードを使用すると、すべてのアイテムの不透明度が同じになります。
ログによると、状態は約50%に達します...

何か案は?getMarker()どちらのメソッドもオーバーライドしても役に立ちませんOverlayItem。同じ効果です。

このアプローチ、2つの異なるドローアブル(各ケースに1つ)を使用する場合に機能します...ただし、同じドローアブルを使用する必要があります。

for (OverlayItem overlay : overlays) {              
    Drawable marker = boundCenterBottom(context.getResources().getDrawable(markerId));
    if (/* some condition - about 50/50 */) {           
        marker.setAlpha(100);
        Log.d("itemized Overlay", "FILTER set marker to => " + marker);
    } else {
        Log.d("itemized Overlay", "NOFILT set marker to => " + marker);
    }

    overlay.setMarker(marker);
}
4

1 に答える 1

0

インスタンスを呼び出す必要mutate()がありDrawableます。そうしないと、状態が共有されます。

mutate()のドキュメントで述べられているように:

[...]可変ドローアブルは、その状態を他のドローアブルと共有しないことが保証されています。これは、リソースからロードされたドローアブルのプロパティを変更する必要がある場合に特に便利です。デフォルトでは、同じリソースからロードされたすべてのドローアブルインスタンスは共通の状態を共有します。1つのインスタンスの状態を変更すると、他のすべてのインスタンスも同じ変更を受け取ります。[...]

非常に単純で、次のように機能します。

for (OverlayItem overlay : overlays) {              
    Drawable marker = boundCenterBottom(context.getResources().getDrawable(markerId));
    marker.mutate();
    if (/* some condition */) {           
        marker.setAlpha(100);
    }

    overlay.setMarker(marker);
}
于 2012-08-07T13:59:57.693 に答える