我正在尝试更改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);
}