2017-03-23 7 views
0

-Code zum Download Bilder und Blick in ImageviewBild url Listview Xamarin

public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     var feedItem = this.feedsList[position]; 

     var view = (convertView ?? context.LayoutInflater.Inflate(Resource.Layout.ItemListItemLayout, parent, false)) as LinearLayout; 

     var img = view.FindViewById<ImageView>(Resource.Id.imazhi); 
     var imageBitmap2 = GetImageBitmapFromUrl(feedItem.link_img); 
     img.SetImageBitmap(imageBitmap2); 

     return view; 
    } 

private Bitmap GetImageBitmapFromUrl(string url) 
    { 
     Bitmap imageBitmap = null; 

     using (var webClient = new WebClient()) 
     { 
      try 
      { 
       var imageBytes = webClient.DownloadData(url); 
       if (imageBytes != null && imageBytes.Length > 0) 
       { 

        imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length); 
       } 
      } 
      catch 
      { 

      } 
     } 

     return imageBitmap; 
    } 

Es funktioniert, aber es braucht Zeit zu laden, und ich kann nicht auf dem Handy-Bildschirm bewegen. Ist mehr als vierzig Bilder

Was ich will:

lädt mehr ohne meinen Bildschirm Absturz

Während es lädt kann ich das Listview

Beispiel für Anwendungen mit Bildern verschieben: Instagram, Facebook, wo die Fotos werden geladen, sperrt den Bildschirm nicht

Kann mir jemand helfen? entschuldige das Englisch;)

Antwort

0

Ich benutze FFImageLoading in meiner Xamarin.Android App und es funktioniert sehr gut. Es speichert Bilder automatisch auf Festplatte und bietet viele weitere Funktionen.

nuget: https://www.nuget.org/packages/Xamarin.FFImageLoading/

Dokumentation: https://github.com/luberda-molinet/FFImageLoading/wiki

Verwenden ImageViewAsync statt Image

<FFImageLoading.Views.ImageViewAsync 
    android:id="@+id/imgLiterature" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="8dp" 
    android:adjustViewBounds="true" 
    android:background="@android:drawable/ic_menu_gallery" 
    android:scaleType="fitXY" /> 

und Bild laden:

public void LoadImage (FFImageLoading.Views.ImageViewAsync imageview, string url) 
{ 
    ImageService.Instance.Initialize (new Configuration { 
        HttpClient = new HttpClient() // here you can add authentication if needed 
    }); 
    ImageService.Instance.LoadUrl (url).Into (imageview); 
} 

es asynchron ausgeführt wird und nicht blockiert die UI