По поводу производительности, без профилирования мы не можем сказать.
Возможно, на целевом телефоне рисование линий аппаратно ускорено, и вы должны рисовать график с нуля, используя примитивы рисования линий в каждом кадре.
С другой стороны, простое управление пикселями буфера изображения будет:
Создайте изображение нужного размера и очистите его до «background_color
». Это изображение должно иметь функцию setpixel ().
Иметь массив значений, которые записывают y каждого времени x, поэтому для любого столбца вы знаете, где вы в последний раз строили график.
Обрабатывайте эти "chart_image
" и "chart_array
" как циклический буфер. Для каждого временного шага:
Y = ...;
X = time_since_start % chart_width;
chart_image.setpixel(X,chart_array[X],background_color); // clear previous line
chart_array[X] = Y;
chart_image.setpixel(X,chart_array[X],foreground_color); // draw new plot
А теперь вам нужно это уничтожить. Вам нужно дважды пролистать изображение:
X = time_since_start % chart_width;
// the newest data is on the left of the chart_image but gets drawn on the right side of the output
blit(out_x+X,out_y, // destination coordinates
chart_image,
0,0, // top left of part of chart_image to blit
X,chart_height); // bottom right of chart_image part
// the oldest data is on the right of the chart_image but gets drawn on the left side of the output
blit(out_x,out_y,
chart_image,
X,0,
chart_width,chart_height);
Ситуация усложняется, если вы хотите использовать линии, а не отдельные пиксели, но drawline()
вместо setpixel()
может сделать эту работу и с этим подходом.
(Прошу прощения за то, что не знал API-интерфейсы Android; но подход является общим.)