Android Maps V2:缩小时多边形填充消失

Posted

技术标签:

【中文标题】Android Maps V2:缩小时多边形填充消失【英文标题】:Android Maps V2: Polygon fill disappears when zooming out 【发布时间】:2013-12-02 19:21:56 【问题描述】:

我试图在我的 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 上。令人惊讶的是,它可以在较慢、较旧的设备上运行!由于附加调试器会使应用程序变得很慢,也许这里有某种连接?

非常感谢, 马可

【问题讨论】:

我在圆形填充中看到了同样的情况。附加调试器是什么意思? logcat 以外的调试器? 没关系,例如,您的意思是 Eclipse 调试器。我可以确认。在该调试模式下运行时,应用程序非常慢,但我所有的圆圈填充都完美绘制,并且在缩放/平移时永远不会消失。发生了什么事? 您解决了这个问题吗?我现在正在处理它。 也许这些链接可以为您提供答案? blog.wittchen.biz.pl/…developer.android.com/guide/topics/graphics/hardware-accel.html 【参考方案1】:

如果您在两次更新中所说的都是真的,那么这就是线程的味道。你在某个地方遇到了线程问题。仅使用您提供的代码的 sn-p,看起来没有什么不合适的,但需要检查您的其余代码才能弄清楚这一点。最有可能发生的是,绘制这些多边形的调用是在视图准备好绘制之前开始的。在没有看到任何东西的情况下,我会提出一些类似的建议来解决问题:

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。这可能无法在地图视图上按预期工作,您可能必须将其发布到不同的队列中,或者进行一些延迟发布。我对地图框架不够熟悉,无法确定这会解决它,但听起来这里肯定存在线程问题。

【讨论】:

以上是关于Android Maps V2:缩小时多边形填充消失的主要内容,如果未能解决你的问题,请参考以下文章

由圆圈组成的谷歌地图多边形

如何启用 google maps android api 以实现平滑的两指缩放?

Android Google Maps:禁用 MapFragment 中的拖动

Android Google Maps:使用折线在多边形中切孔

在Android中使用Google Maps API检查点是不是在多边形中

Ionic 5 Google Maps 标记在缩放时闪烁