Uso questo blog per pubblicare e mantenere una serie di android memo che mi segnerò man mano che avanzerò nell'apprendimento di Android.
Il primo che inaugura il tag Android parla del SurfaceHolder e del modo in cui è gestito il double buffering.
Come funziona il sistema grafico di Android.
Ogni "finestra" è implementata con un oggetto Surface sottostante.
Questi oggetti surface sono tutti "double buffered" ovvero mantengono DUE buffer di disegno, un frontBuffer ed un backBuffer.
Il sistema (penso un qualcosa che si chiama SurfaceFlinger) quando deve disegnare il contenuto della finestra su schermo utilizza il frontBuffer.
Gli sviluppatori (i programmi) invece operano sul backBuffer normalmente con una sequenza di operazioni di disegno comprese fra una chiamata a lockCanvas ed una ad unlockCanvas.
Quando viene chiamata la unlockCanvas il sistema "scambia" (scrivere "swappa" mi faceva schifo) backbuffer e frontBuffer cioè il buffer su cui avete disegnato finora diventa effettivamente lo schermo attivo. Il precedente schermo attivo viene messo a disposizione del programma come buffer di disegno.
Attenzione ! pare che non venga cancellato e ricreato ne che venga allineato con quello che è appena diventato il frontBuffer.
Il programma deve quindi ridisegnare tutto il backBuffer, e non solo le modifiche dallo stato precedente, altrimenti si incorrerebbe in problemi di visualizzazione.
Se dovete solo fare aggiornamenti di una piccola regione dello schermo, le api mettono a disposizione la funzione lockCanvas(Rect dirty) che vi permette di specificare il rettangolo su cui andrete ad agire, tutti i pixel del rettangolo andranno ridisegnati, ma il resto dell'immagine verrà preservata dal frame precedente.
Rimane comunque comodo che un programma si crei una sua Bitmap interna per il lavoro, attacchi la Bitmap ad un Canvas per disegnare e poi usi la drawBitmap per disegnare la Bitmap a schermo fra le istruzioni lockCanvas ed unlockCanvas.
venerdì 17 settembre 2010
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento