Lui*_*uis 6 java graphics maps android android-mapview
背景
我正在开发一个在地图上显示路径的应用程序(谷歌地图和OpenStreet地图).波纹输出示例:

为了绘制上述路径,我使用以下方法:
private void drawWithoutElevation(Canvas canvas, Projection projection){
if(rebuildRequired)
pathBuild();
else{ //check if path need to be offset
if(offsetRequired){
path.offset(offset.x, offset.y);
}
}
canvas.drawPath(path, paint);
}
Run Code Online (Sandbox Code Playgroud)
上述方法需要大约1.5ms来绘制10.000点,这是可以接受的.
但是,我还希望根据点高度显示使用不同颜色的路径.波纹输出示例:

由于我找不到为每个路径段定义不同颜色的方法,我尝试了以下方法:
方法1
最明显的解决方案,canvas.drawLine()在路径中的每个点之间使用.示例:
private void drawWithElevation(Canvas canvas, Projection projection){
for(int i=1; i<geoArrList.size(); i++){
paint.setColor(geoArrList.get(i));
canvas.drawLine(pPrev.x, pPrev.y, p1.x, p1.y, paint);
pPrev.set(p1.x, p1.y);
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于相同的10.000点,这导致非常令人失望的约80ms的时间.
方法2
以离散的步骤分割高度,并建立一个Path对象列表,每个高度段更改一个.代码示例如下:
private void drawWithElevation(Canvas canvas, Projection projection){
if(rebuildRequired)
pathBuild();
for(int i=0; i<pathSegments.size(); i++){
if(needOffset){
pathSegments.get(i).path.offset(offsetX, offsetY);
}
paint.setColor(pathSegments.get(i).color);
canvas.drawPath(pathSegments.get(i).path, paint);
}
}
Run Code Online (Sandbox Code Playgroud)
对于相同的10.000点,这导致约5ms的令人失望的时间.
题
尽管与第一种方法相比,最后一种方法显示出显着的改进,但我希望进一步改进它.
是否有其他方法可用于以更有效的方式(速度和/或内存使用)绘制每段不同颜色的路径?
感谢您的时间和帮助.
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |