用android drawLines画出很多行

问题描述 投票:2回答:3

当我绘制很多线条时,应用程序需要很长时间才能完成绘图。我的目标是连接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);}
android canvas points
3个回答
-1
投票

首先尝试创建Path,然后调用_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);

4
投票

使用绘制线。将点打包到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是浮点数中的可用长度[]。 Drawlines每段有4个浮点数,但是如果你像那样错开它们就可以得到你想要的结果,而不需要浪费2倍的内存,你可以根据需要有效地移动点数。


2
投票

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

使用Canvas.drawLines而不是Canvas.drawLine,我的绘图时间缩短了一半。

我必须绘制12行,每行5000点,使用Canvas.drawLine()方法绘制时间为2393毫秒而不是6000毫秒。

            int lineIndex = 0;
            float[] lines = new float[x.length * 4];
            for (int i = 0; i < x.length; i++)
            {
                    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);
© www.soinside.com 2019 - 2024. All rights reserved.