Android更改Itemize Overlay中某些项目的不透明度

时间:2012-08-06 16:11:35

标签: java android google-maps itemizedoverlay

我正在尝试更改OverlayItems中某些ItemizedOverlay的Alpha通道。 ItemizedOverlay已添加到Android中的MapView中。

如果我使用此代码,则所有项目具有相同的不透明度 根据测井记录,病情达到约50%......

有什么想法吗?如果我覆盖getMarker()中的OverlayItem方法也无济于事。这是同样的效果。

如果我使用2个不同的drawable(每种情况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);
}

1 个答案:

答案 0 :(得分:0)

您必须在mutate()实例上调用Drawable,否则它将共享该状态。

就像在mutate()的文档中所说:

  

[...] A   可变的drawable保证不与任何其他人共享其状态   绘制。当您需要修改属性时,这尤其有用   从资源加载的drawables。默认情况下,所有drawables   从同一资源加载的实例共享一个公共状态;如果你   修改一个实例的状态,所有其他实例将接收   同样的修改。 [...]

非常简单,就是这样:

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

    overlay.setMarker(marker);
}