安卓更改了分项叠加中某些项目的不透明度



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

如果我使用此代码,则所有项目都具有相同的不透明度。
根据日志,病情命中率约为 50%......

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

如果我使用 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);
}
您必须

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

最新更新