[Mobile App] Xamarin – Caricamento Asincrono Immagini

Per evitare rallentamenti durante il caricamento di una UITableView con immagini è necessario caricare un placeholder (quindi un immagine già presente negli asset) e poi lanciare un thread per caricare l’immagine da internet cosi da non rallentare lo scroll.


public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
...

UIImage cachedImage = item.immagine_evento;

if (cachedImage == null) {

ThreadPool.QueueUserWorkItem ((t) => {

// retrive the image and create a local scaled thumbnail; return a UIImage object of the thumbnail
//cachedImage = ricetteImages.GetImage(entry.Immagine, true) ?? Placeholder;
cachedImage = FromUrl (item.url_immagine) ?? Placeholder;

InvokeOnMainThread (() => {
// if we are on a wrong row, don’t assign the image, the cell could have been already reused!
//if (cell.Tag != (nint)indexPath.Row) return;
// assign the image and animate a fade in
//cell.Immagine.Alpha = 0;

cell.setImageAlpha (0);
cell.setImage (cachedImage);
//UIView.Animate (0.3, () => { cell.Immagine.Alpha = 1; });
UIView.Animate (0.3, () => {
cell.setImageAlpha (1);
});

item.immagine_evento=cachedImage;
});

});

} else {
cell.setImage (cachedImage);
}

Dentro la funzione che fa a definire la cella, quindi appena viene creata una cella dinamicamente andiamo a verificare se l’immagine è già cachata o no (item.immagine_evento è un oggetto UIImage dove viene salvata l’immagine una volta scaricata)

Placeholder invece è un oggetto UIImage definito nel costruttore dell’oggetto che inizializza con un immagine già dentro gli asset.

Invece nella cella (cell) sono presenti due metodi setImage e setImageAlpha che settano l’immagine e la trasparenza cosi da aggiornare la cella con l’immagine appena scaricata.

Start typing and press Enter to search

bootstrap4 web agency web design