UI 线程上的多色折线



我的代码片段是这样的。

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 线程。 而且我无法在背景上绘制这些折线,因为绘制折线是视图的操作,所以我如何优化彩色折线绘图。 我真的很感激你们的帮助,请在这里帮助我。 谢谢

您可以使用线程在内存中的位图/画布上执行所有绘图部分,然后 UiThread 应仅显示该位图。 忘记了位图应该同时从一个线程使用,因此您必须使用一些同步过程在不同的时间写入和读取,以避免在同一时间执行它们。

如果折线只需要两种颜色,则可以减少折线的数量:使用虚线描边图案,并且为每个折线绘制的不是很多不同颜色的折线,而是只有两条折线:第一条折线 - 使用一种颜色的实心,第二条(在同一点上(- 在第一条线上用其他颜色虚线。

如果不需要所有源点,则可以减少折线点的数量(不丢失折线形状(:使用PolyUtil.simplify()方法简化折线,而不是在源上而是在简化点集上绘制两条折线(或每条线段(。

相关内容

  • 没有找到相关文章

最新更新