Ho riscontrato una situazione in cui devo visualizzare le immagini in una presentazione che cambia l'immagine molto velocemente. Il semplice numero di immagini mi fa desiderare di memorizzare i dati JPEG in memoria e decodificarli quando voglio visualizzarli. Per facilitare il Garbage Collector, sto usando BitmapFactory.Options.inBitmap per riutilizzare bitmap.BitmapFactory.Options.inBitmap causa la rottura quando si cambia la bitmap ImageView spesso
Sfortunatamente, questo causa tearing piuttosto grave, ho provato diverse soluzioni come sincronizzazione, semafori, alternando tra 2-3 bitmap, tuttavia, nessuno sembra risolvere il problema.
Ho creato un progetto di esempio che dimostra questo problema su GitHub; https://github.com/Berglund/android-tearing-example
Ho un thread che decodifica il bitmap, mette sul thread dell'interfaccia utente, e dorme per 5 ms:
Runnable runnable = new Runnable() {
@Override
public void run() {
while(true) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
if(bitmap != null) {
options.inBitmap = bitmap;
}
bitmap = BitmapFactory.decodeResource(getResources(), images.get(position), options);
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap);
}
});
try {
Thread.sleep(5);
} catch (InterruptedException e) {}
position++;
if(position >= images.size())
position = 0;
}
}
};
Thread t = new Thread(runnable);
t.start();
La mia idea è che ImageView.setImageBitmap (bitmap) disegna il bitmap il prossimo vsync, tuttavia, probabilmente stiamo già decodificando la bitmap successiva quando questo accade, e come tale, abbiamo iniziato a modificare i pixel bitmap. Sto pensando nella giusta direzione?
Qualcuno ha qualche consiglio su dove andare da qui?
'ImageView' è un requisito necessario? Suggerirei 'SurfaceView' o' TextureView' per alte percentuali di draw. –
Sto affrontando la stessa lacrimazione ma in uno scenario diverso. Non posso fare domande a causa di questa politica di stackoverflow del culo. Per favore aiutami qualcuno. Sarà di grande aiuto per me. – therealprashant