Я создаю линейный график, и код, который я первоначально использовал, был настолько медленным при рисовании, что он был бесполезен. Я заменил его кодом, который нашел в Интернете, и он стал намного быстрее. Мне было просто любопытно, почему оригинальный код такой медленный. Весь приведенный ниже код находится внутри метода 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;
Я просто не понимаю, почему один из них намного эффективнее другого. Есть идеи?