UI线程上的多色折线

时间:2018-07-09 17:09:24

标签: android google-maps

我的代码段是这样的。

 int size = listPoints.size();
        PolylineOptions optline = new PolylineOptions();
        PolylineOptions optline2 = new PolylineOptions();
        optline.geodesic(true);
        optline.width(10);
        optline2.geodesic(true);
        optline2.width(10);
        for (int i = 0; i < size - 1; i++) {

            TRKPT pointD = listPoints.get(i);
            TRKPT pointA = listPoints.get(i + 1);
            int green = (int) ((float) 255 - (float) (i / (float) size) * (float) 255);
            int red = (int) ((float) 0 + (float) (i / (float) size) * (float) 255);

            optline.add(new LatLng(pointD.getLat(), pointD.getLon()), new LatLng(pointA.getLat(), pointA.getLon()));
            optline2.add(new LatLng(pointD.getLat(), pointD.getLon()), new LatLng(pointA.getLat(), pointA.getLon()));

            if(i%2 == 0){
                optline.color(Color.rgb(red, green, 0));
                mMap.addPolyline(optline);
                optline = new PolylineOptions();
                optline.geodesic(true);
                optline.width(10);
            }
            else{
                optline2.color(Color.rgb(red, green, 0));
                mMap.addPolyline(optline2);
                optline2 = new PolylineOptions();
                optline2.geodesic(true);
                optline2.width(10);
            }
        }
  

当点更像1000左右时,此逻辑可以说100 -400点,它阻塞了UI线程。而且我无法在背景上绘制这些多段线,因为绘制多段线是对视图的操作,因此如何优化彩色多段线图。我非常感谢您的帮助,请在这里帮助我。谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用线程在内存中对位图/画布进行所有绘图的地方,然后UiThread应该仅显示该位图。 显然,只能同时在一个线程中使用位图,因此您必须使用一些同步过程在不同的时间进行写入和读取,而避免同时进行。

答案 1 :(得分:0)

如果折线仅需要两种颜色,则可以减少折线的数量:使用虚线enter image description here并为每条折线绘制不多的具有不同颜色的折线,而只能绘制两条折线:第一种-具有一种颜色的实线,以及第二个(在相同的点上)-在第一个之上用其他颜色划线。

如果不需要所有源点,则可以减少多段线点的数量(不损失多段线形状):使用Stroke pattern方法简化多段线,并绘制不在源上的两条多段线(或每个线段)但设置了简化点。