2

当我画很多线时,应用程序需要很长时间才能完成绘图。我的目标是连接 a1[] 中的点以形成一条线。有没有更快的方法来做到这一点?请帮忙!

           > $ for (int i = 0; i < x.length - 1; i++) {
       >        _canvas.drawLine(a1[i].x, a1[i].y, a1[i + 1].x, a1[i + 1].y,_paint);}
4

3 回答 3

6

使用画线。将这些点打包到一个 float[] 中,该行中的每个点都有 2 个点,然后执行以下操作:

if (count >= 4) {
    if ((count & 2) != 0) {
        canvas.drawLines(pointlist, 0, count-2, linePaint);
        canvas.drawLines(pointlist, 2, count-2, linePaint);
    }
    else {
        canvas.drawLines(pointlist, 0, count, linePaint);
        canvas.drawLines(pointlist, 2, count - 4, linePaint);
    }
}

其中 count 是点的 float[] 中的可用长度数。画线每段有 4 个浮点数,但如果你像这样错开它们,你会得到你想要的结果,而不需要浪费 2 倍的内存,如果需要的话,你可以有效地移动这些点。

于 2015-09-10T09:39:59.633 回答
2

采用Canvas.drawLines(float[] pts, Paint paint);

使用Canvas.drawLines而不是Canvas.drawLine我将绘图时间减半。

我必须绘制 12 条线,每条线有 5000 个点,使用此代码绘制的时间是 2393 毫秒,而不是使用Canvas.drawLine()方法的 6000 毫秒。

            int lineIndex = 0;
            float[] lines = new float[a1.length * 4];
            for (int i = 0; i < a1.length-1; i++) // -1 to deal with last point
            {
                    lines[lineIndex++] = a1[i].x;
                    lines[lineIndex++] = a1[i].y;
                    lines[lineIndex++] = a1[i + 1].x
                    lines[lineIndex++] = a1[i + 1].y;
            }
            _canvas.drawLines(lines, _paint);
于 2019-03-11T09:22:01.810 回答
-1

尝试先创建一个路径,然后调用 _canvas.drawPath():

Path p = new Path();
p.moveTo(a1[0].x, a1[0].y);
for (int i = 1; i < x.length; i++) {
    p.lineTo(a1[i].x, a1[i].y);
}
_canvas.drawPath(p, _paint);
于 2012-04-18T23:16:30.327 回答