我的代码段是这样的。
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线程。而且我无法在背景上绘制这些多段线,因为绘制多段线是对视图的操作,因此如何优化彩色多段线图。我非常感谢您的帮助,请在这里帮助我。谢谢
答案 0 :(得分:0)
您可以使用线程在内存中对位图/画布进行所有绘图的地方,然后UiThread应该仅显示该位图。 显然,只能同时在一个线程中使用位图,因此您必须使用一些同步过程在不同的时间进行写入和读取,而避免同时进行。
答案 1 :(得分:0)
如果折线仅需要两种颜色,则可以减少折线的数量:使用虚线并为每条折线绘制不多的具有不同颜色的折线,而只能绘制两条折线:第一种-具有一种颜色的实线,以及第二个(在相同的点上)-在第一个之上用其他颜色划线。
如果不需要所有源点,则可以减少多段线点的数量(不损失多段线形状):使用Stroke pattern方法简化多段线,并绘制不在源上的两条多段线(或每个线段)但设置了简化点。