私は折れ線グラフを作成していますが、もともと使用していたコードは、描画が非常に遅くて無駄でした。私はそれをオンラインで見つけたコードに置き換え、ずっと速くなった。元のコードがなぜそんなに遅いのか不思議でした。下記掲載のコードのすべては、カスタムビューのonDraw()メソッド内である:なぜアルゴリズムが遅いのですか?
オリジナル遅いコード:
float yStart = 300f;
for (int i=0; i < values.length; i++){
drawPath.moveTo(xStart, yStart);
drawPath.lineTo(xStart+10, values[i]);
drawPath.close();
canvas.drawPath(drawPath, linePaint);
xStart += 10;
yStart = values[i];
}
その後速いコード:
float datalength = values.length;
float colwidth = (width - (2 * border))/datalength;
float halfcol = colwidth/2;
float lasth = 0;
for (int i = 0; i < values.length; i++) {
float val = values[i] - min;
float rat = val/diff;
float h = graphHeight * rat;
if (i > 0)
canvas.drawLine(((i - 1) * colwidth) + (horStart + 1) + halfcol, (border - lasth) + graphHeight, (i * colwidth) + (horStart + 1) + halfcol, (border - h) + graphHeight, linePaint);
lasth = h;
私はちょうどなぜ他のものよりもはるかに効率的であるのか理解していない。何か案は?
私は他の人にそれに答えるようにします。 – Idistic
'line'を描画するのに' path'を使うのはあまり効率が悪いかもしれません。パスは、最後に描画する場合、forループの後に効率的でした。forループの後にのみdrawPathを呼び出そうとし、lineToを呼び出すことはできますか? –