2012-08-06 58 views
0

我試圖更改ItemizedOverlay中某些OverlayItems的alpha通道。 ItemizedOverlay已添加到Android中的MapView中。Android更改在ItemizedOverlay中的某些項目的不透明度

如果我使用此代碼,所有項目具有相同的不透明度。
根據日誌的條件命中約50%...

任何想法?如果我重寫OverlayItem中的getMarker()方法,這也無濟於事。這是一樣的效果。

這種方法確實工作,如果我使用2個不同的drawables(每個案例1)...但我需要使用相同的drawable。

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); 
} 

回答

0

你必須呼籲Drawable實例mutate(),因爲否則將共享狀態。

贊()發生變異的文檔中所述:

[...]甲 可變抽拉是保證不與任何其他 抽拉共享其狀態。這在您需要修改從資源加載的可繪製的屬性 時特別有用。默認情況下,從同一資源加載的所有可繪製實例共享一個公共狀態;如果您修改了一個實例的狀態 ,則所有其他實例都會收到 相同的修改。 [...]

很簡單,它的工作原理是這樣的:

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

    overlay.setMarker(marker); 
} 
相關問題