Jeśli chodzi o wydajność, bez profilowania nie możemy powiedzieć.
Możliwe, że rysunek liniowy jest przyspieszany sprzętowo w telefonie docelowym i należy narysować wykres od podstaw, używając prymitywów rysowania linii w każdej klatce.
Z drugiej strony, prosta manipulacja piksel bufor obrazu będzie:
Utwórz obraz, który jest właściwy rozmiar i wyczyścić go do „background_color
”. Ten obraz musi mieć funkcję setpixel().
Masz tablicę wartości, które rejestrują y każdego x, więc dla każdej kolumny wiesz, gdzie ostatnio został naniesiony wykres.
Traktuj ten "chart_image
" i "chart_array
" jako bufor cykliczny. Dla każdego kroku czasowego:
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
A teraz musisz go zmącić. Trzeba Blit obraz dwukrotnie:
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);
Robi się bardziej skomplikowane, jeśli chcesz korzystać z linii zamiast pojedynczych pikseli, ale drawline()
zamiast setpixel()
może sprawić, że praca z tym podejściem zbyt.
(Przepraszam, że nie znamy interfejsów API Androida, ale podejście jest ogólne.)
Myślę, że widzę możliwe podejście przy użyciu Bitmap, getPixels i setPixels. Nie jestem pewien, czy to złe podejście, ale robię to. Proszę doradź! –