1

我正在做一个简单的项目,可以跟踪用户的位置并使用Polyline来绘制这些位置。现在我想添加一个复选框来切换是否显示这些行。我认为的挑战是我在这里有很多折线,所以我不知道如何同时设置它们全部不可见/可见。在Google Map中显示/隐藏一组多段线Android API V2

也许我可以在一个图层上绘制它们,然后切换该图层的可见性?我只是猜测..

有谁知道该怎么做?感谢提前:)

编辑: 可能不是很相关的,但我还是会显示我怎么加折线一旦检测到用户移动

PolylineOptions options = new PolylineOptions(); 

    options.add(lastLoc, curLoc); 

    mMap.addPolyline(options.color(Color.RED).width(3)); 

回答

2

创建一个Polyline它最初是空的(回以后)你获得参考GoogleMap之后。

后你会得到一个位置更新添加点到此Polyline与(丑陋的,因为没有Polyline.addPoint)下面的代码:

List<LatLng> points = polyline.getPoints(); 
points.add(currentLocationLatLng); 
polyline.setPoints(points); 

当你需要隐藏它,使用polyline.setVisible(false);

所以现在你不必担心一束短的多段线,但只是一个长。

并不总是初始为空: 要确保旋转手机或进程在后台被杀害时,你不上的用户体验输了,你要“坚持”的所有点。 onSaveInstanceState应该够了。

+0

只是意识到你已经回答了我的最新三个问题..很多〜 – Arch1tect

+0

'线。 setPoints(列表分)'do? –

+0

已阅读此http://developer.android.com/reference/com/google/android/gms/maps/model/Polyline.html#setPoints(java.util.List),但它不是非常有用! –

2

要设置所有的人在同一时间,每增加一个lastLoccurLoc成列表,然后使用options.addAll(List)

您将立即显示所有折线,因此您可以删除/隐藏在一起,他们如果想:)

编辑:一些实施例

INIT的List

List<LatLng> points = new ArrayList<LatLng>();

插入每个curLoc & lastLocpoints

while (!traceFinished.equals(true)){ 
    points.add(curLoc); //read every new current location 
} 
points.add(lastLoc); //the final location, after the trace stopped 

显示折线,可以再调用:

PolylineOptions options = new PolylineOptions(); 
options.addAll(points); 
mMap.addPolyline(options.color(Color.RED).width(3)); 

好运

+0

谢谢,它的工作原理。这种方法唯一的办法是,每当向折线添加新的位置时,我必须移除大折线并重绘,所以我不知道这是否是最好的方法(当用户移动时我更新我的折线,所以在我的代码中没有while循环,我每次都追加多段线)如果本周没有更好的答案,我肯定会接受这个。:) – Arch1tect

+0

这很好,只要多线被删除和重绘,应该没有内存泄漏或类似的东西:) – reidzeibel

相关问题