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