1

Dans Xamarin, j'ai un Activity qui a un GridView et une liste d'adresses Web d'image. Une liste d'objets Bitmap est extraite puis affichée dans le GridView à partir de ces adresses Web.Afficher des images bitmap dans un GridView

Voici mon MainActivity code:

public class MainActivity : Activity 
{ 
    GridView gridView; 
    List<String> bitmapUris; 
    List<Bitmap> gridViewItems; 

    protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 

     SetContentView (Resource.Layout.Main); 
     gridView = FindViewById<GridView>(Resource.Id.gridView); 

     bitmapUris = new List<string>(); 
     bitmapUris.Add ("http://images4.fanpop.com/image/photos/15000000/My-Sample-Pictures-lexi-and-sophie-15061826-1024-768.jpg"); 
     bitmapUris.Add ("http://www.cameraegg.org/wp-content/uploads/2013/08/AF-S-DX-NIKKOR-18-140mm-f-3.5-5.6G-ED-VR-sample-images-1.jpg"); 
     bitmapUris.Add ("http://upload.wikimedia.org/wikipedia/en/5/5d/The_Samples-Outpost.jpg"); 
     bitmapUris.Add ("http://www.1800postcards.com/images/samples/sample_kits2.jpg"); 

     gridViewItems = GetBitmapImages (bitmapUris); 
     gridView.Adapter = new GridViewAdapter (this, gridViewItems); 
    } 

    List<Bitmap> GetBitmapImages(List<String> bitmapUris) 
    { 
     List<Bitmap> images = new List<Bitmap>(); 
     Bitmap image; 
     foreach (var uri in bitmapUris) 
     { 
      image = GetImageBitmapFromUri (uri); 
      images.Add (image); 
     } 
     return images; 
    } 

    private Bitmap GetImageBitmapFromUri(string uri) 
    { 
     Bitmap imageBitmap = null; 

     using (var webClient = new WebClient()) 
     { 
      var imageBytes = webClient.DownloadData(uri); 
      if (imageBytes != null && imageBytes.Length > 0) 
      { 
       imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length); 
      } 
     } 

     return imageBitmap; 
    } 
} 

Voici mon code GridViewAdapter:

public class GridViewAdapter : BaseAdapter 
{ 
    Activity context; 
    List<Bitmap> gridViewtems; 

    public GridViewAdapter (Activity context, List<Bitmap> gridViewtems) 
    { 
     this.context = context; 
     this.gridViewtems = gridViewtems; 
    } 

    public override int Count { 
     get { return gridViewtems.Count; } 
    } 

    public override Java.Lang.Object GetItem (int position) 
    { 
     return null; 
    } 

    public override long GetItemId (int position) 
    { 
     return 0; 
    } 

    public override View GetView (int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 
     if (view == null) 
      view = context.LayoutInflater.Inflate(Resource.Layout.GridViewItemWithImageAndText, null); 
     view.FindViewById<ImageView> (Resource.Id.image).SetImageBitmap (gridViewtems[position]); 
     view.FindViewById<TextView> (Resource.Id.text).Text = position.ToString(); 
     return view; 

    } 
} 

Actuellement, lorsque les charges d'application, l'écran se vide jusqu'à ce que le Bitmaps sont récupérés à partir du Web adresses.

Ma question est la suivante: Comment puis-je afficher le Activity avec supports pour les placer GridView articles, et quand chaque Bitmap est récupéré, l'image de l'article GridView concerné est chargé? Est-ce fait dans le MainActivity, ou dans le GridViewAdapter?

Merci à l'avance

+0

utilisation lazy loading http://stackoverflow.com/a/559781/964741 –

Répondre

2

Essayez d'utiliser Image Loader Universal pour montrer les images de votre URL pour GridView.

Envoyer cette: https://github.com/nostra13/Android-Universal-Image-Loader

+0

Merci à. Comment puis-je ajouter Universal Image Loader à mon projet Xamarin? Je vois qu'il y a beaucoup de fichiers .jar dans le dossier de téléchargement. – user3736648

+0

Vous pouvez trouver l'option de téléchargement de fichiers ZIP dans le coin droit à la fin. Lorsque vous téléchargez cela, vous trouverez quelques fichiers dans le dossier src et universal-image-loader-1.9.2-SNAPSHOT-with-sources.jar dans le dossier libs. Vous devez utiliser ce fichier jar –

+0

J'ai ce fichier, où dois-je le placer pour utiliser la classe dans Xamarin? – user3736648

Questions connexes