繁体   English   中英

路径() - 智能彩色片段

[英]Path() - Smart colored segments

背景

我正在开发一个在地图上显示路径的应用程序(谷歌地图和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); 
}

上述方法需要大约1.5ms来绘制10.000点,这是可以接受的。

但是,我还希望根据点高度显示使用不同颜色的路径。 波纹输出示例:

路径2

由于我找不到为每个路径段定义不同颜色的方法,我尝试了以下方法:

方法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);
        }
    }
}

对于相同的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); 
    }
}

对于相同的10.000点,这导致约5ms的令人失望的时间。

尽管与第一种方法相比,最后一种方法显示出显着的改进,但我希望进一步改进它。

是否有其他方法可用于以更有效的方式(速度和/或内存使用)绘制每段不同颜色的路径?

感谢您的时间和帮助。

通过谷歌查看MyTracks的来源,这可能会带来一些灵感

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM