我试图在我的MapView上显示多个多边形,其中一些重叠并具有不同的颜色。当我添加它们时,一切看起来都很好,但是一旦我缩小,许多(不是全部)多边形就会停止填充。来回移动和滚动有时会再次填充其中一些,但它似乎是随机行为。
添加多边形的代码:
clearAreas();
for (Area area: areas) {
for (List<LatLng> subArea: area.getSubAreas()) {
mAreaPolygons.add(getMap().addPolygon(
new PolygonOptions()
.strokeWidth(2.0f)
.zIndex(++zIndex)
.strokeColor(area.getColor())
.fillColor(area.getTransparentColor())
.addAll(subArea)));
}
}
据我所知(根据文档),如果没有正确指定几何体,则不会填充多边形。我尝试按顺时针和逆时针顺序添加点,这没有什么区别。
任何人都可以解释这种行为吗?
更新:如果连接了调试器,一切都运行正常!多边形都被填充并在缩小时保持填充状态。一旦我分离调试器,多边形就会再次失去填充。这是怎么回事?
更新#2 :问题出现在我的Galaxy S3上。令人惊讶的是,它适用于较慢,较旧的设备!由于附加调试器会使应用程序变得非常慢,这里可能存在某种连接?
非常感谢, 马可
答案 0 :(得分:0)
如果您在两次更新中所说的内容属实,那么这就是线程。在某个地方你遇到了线程问题。只提供您提供的代码片段,没有什么看起来不合适,但需要检查其余代码才能解决这个问题。最可能发生的是绘制这些多边形的调用是在视图准备好之前开始的。在没有看到任何内容的情况下,我建议采用这些方法来解决问题:
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition pos) {
if (pos.zoom != currentZoom) {
mMap.post(new Runnable() {
public void run() {
// TODO: call the method that wraps the code you provided
});
}
});
这样做会在视图完成呈现后调用此处提供的Runnable
。这可能无法在地图视图上按预期工作,您可能必须将其发布到不同的队列,或执行一些延迟发布。我对地图框架不够熟悉,无法确定这会解决它,但这听起来确实存在线程问题。