0

我正在尝试更改OverlayItems. ItemizedOverlayItemizedOverlay添加到 Android 中的 MapView 中。

如果我使用此代码,所有项目都具有相同的不透明度。
根据日志,这种情况大约达到了 50%...

有任何想法吗?getMarker()如果我覆盖其中的方法也无济于事OverlayItem。这是一样的效果。

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

1 回答 1

0

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

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

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

很简单,它是这样工作的:

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

    overlay.setMarker(marker);
}
于 2012-08-07T13:59:57.693 回答