2012-08-06 2 views
0

의 알파 채널을 ItemizedOverlay으로 변경하려고합니다. ItemizedOverlay이 Android의 MapView에 추가되었습니다.Android 변경 ItemizedOverlay의 일부 항목의 불투명도

이 코드를 사용하면 모두 항목의 불투명도가 동일합니다.
로그에 따르면 조건이 약 50 %에 도달 ...

아이디어가 있으십니까? OverlayItemgetMarker() 메서드를 재정의하면 도움이되지 않습니다. 그것은 같은 효과입니다.

이 접근법 은 두 가지 드로어 블 (각 경우에 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); 
} 

답변

0

당신은 그렇지 않으면 상태를 공유합니다 때문에 Drawable 인스턴스 mutate()를 호출해야합니다.

등의 mutate의 문서()에서 상기 :

는 [...]은 가변 그리기는 다른 그리기와 상태를 공유하지 않도록 보장한다. 자원에서로드 된 드로어 블의 속성 을 수정해야하는 경우 특히 유용합니다. 기본적으로 동일한 리소스에서로드 된 모든 드로어 블 인스턴스는 공통 상태를 공유합니다. 한 인스턴스의 상태를 수정하면 다른 모든 인스턴스는 동일한 수정을 받게됩니다.

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

    overlay.setMarker(marker); 
} 
: [...]

꽤 간단,이 방식으로 작동합니다