Per quanto riguarda le prestazioni, senza profilazione non possiamo dire.
È possibile che il disegno a linee sia accelerato via hardware sul telefono di destinazione e che si debba disegnare il grafico da zero usando le primitive di disegno a linee ogni fotogramma.
D'altra parte, la manipolazione dei pixel diretto di un buffer di immagine sarebbe:
creare un'immagine che è la dimensione giusta e liberate a un "background_color
". Questa immagine deve avere la funzionalità setpixel().
Avere una matrice di valori che registrano la y di ogni x volta, quindi per qualsiasi colonna si conosce l'ultimo grafico tracciato.
Trattare questo "chart_image
" e "chart_array
" come un buffer circolare. Per ogni intervallo di tempo:
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
E ora è necessario blitarlo. È necessario blit l'immagine due volte:
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);
Le cose si fanno più difficili, se si desidera utilizzare le linee piuttosto che i singoli pixel, ma un drawline()
invece di un setpixel()
può fare quel lavoro con questo approccio troppo.
(Chiede scusa per non conoscere le API Android, ma l'approccio è generico.)
Penso di vedere un possibile approccio usando Bitmap, getPixels e setPixels. Non sono sicuro se questo è un approccio negativo, ma sto dando un colpo. Si prega di avvisare! –