2017-03-31 3 views
0

Ich arbeite an einem Fragment, das ein Bild aus dem Internet laden, die Größe ändern und es dann dem Benutzer anzeigen soll. Ziel ist es, das Bild später für eine GridView zu verwenden. Aber ich kann nicht scheinen, dass die Größenänderung funktioniert. Ich bin seit ein paar Stunden festgefahren und habe verschiedene Methoden ohne Glück ausprobiert.Bildgröße ändern, bevor es in ImageView angezeigt wird

Hier ist mein Code:

VaultFragment.cs:

using Android.OS; 
using Android.Views; 
using SupportFragment = Android.Support.V4.App.Fragment; 
using Android.Support.V4.Widget; 
using System.Collections.Generic; 
using Android.Widget; 
using System.Net; 
using System; 
using System.IO; 
using Android.Graphics; 

namespace Test_android.Fragments 
{ 
    public class VaultFragment : SupportFragment 
    { 
     // Global variables 
     private SwipeRefreshLayout gSwipeRefreshLayout; 
     ImageView imageview; 


     public override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 
     } 

     public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
     { 
      // return our custom view for this fragment 
      View view = inflater.Inflate(Resource.Layout.Vault, container, false); 

      // Add SwipeRefreshLayout 
      gSwipeRefreshLayout = view.FindViewById<SwipeRefreshLayout>(Resource.Id.swipeLayout); 

      imageview = new ImageView(view.Context); 
      DownloadRemoteImageFile(); 

      return view; 

     } 



     private async void DownloadRemoteImageFile() 
     { 
      WebClient webClient = new WebClient(); 
      var url = new Uri("https://logo.clearbit.com/cnn.com"); 
      byte[] bytes = null; 
      try 
      { 
       bytes = await webClient.DownloadDataTaskAsync(url); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Error: " + e.ToString()); 

       return; 
      } 

      MemoryStream ms = new MemoryStream(bytes); 

      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.InJustDecodeBounds = false; 
      int sampleSize = options.OutWidth/100; 
      options.OutWidth = 57; 
      options.OutHeight = 57; 

      Bitmap bitmap = BitmapFactory.DecodeStream(ms, null, options); 
      //imageview.LayoutParameters = new LinearLayout.LayoutParams(57,57); 

      var f = imageview.LayoutParameters; 
      imageview.SetImageBitmap(bitmap); 
      gSwipeRefreshLayout.AddView(imageview); 


     } 

    } 
} 

Vault.axml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/swipeLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


</android.support.v4.widget.SwipeRefreshLayout> 

Dies ist, wie es aussieht, wenn ich es laufen Auffüllen der ganze Bildschirm: enter image description here

Antwort

0

Die Probleme bekommen scheint selbst gelöst zu haben. Ich brauchte die Bitmap in einer GridView, also, während ich dies getestet habe, vor dem Aufblasen der Bitmap auf die GridView, hat die Größenanpassung nicht funktioniert. Wenn ich es jedoch in das Raster einfügte, wurde die Größe automatisch geändert, ohne dass die Größenänderungseigenschaften in XML festgelegt wurden.

Obwohl ich keine Lösung gefunden habe, warum die Größe während des Tests nicht geändert wurde, könnte es etwas mit dem Elternfragment oder der Elternaktivität unter Verwendung von zu tun haben.

0

versuchen, diese

Bitmap b = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) 
profileImage.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false)); 

oder

public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) { 
int width = bm.getWidth(); 
int height = bm.getHeight(); 
float scaleWidth = ((float) newWidth)/width; 
float scaleHeight = ((float) newHeight)/height; 
// CREATE A MATRIX FOR THE MANIPULATION 
Matrix matrix = new Matrix(); 
// RESIZE THE BIT MAP 
matrix.postScale(scaleWidth, scaleHeight); 

// "RECREATE" THE NEW BITMAP 
Bitmap resizedBitmap = Bitmap.createBitmap(
    bm, 0, 0, width, height, matrix, false); 
bm.recycle(); 
    return resizedBitmap; 
} 

Arbeit für mich Android Studio (Java) Ich weiß nicht, wo ich C#

+0

Leider machte keine der Lösungen einen Unterschied. – rasperryPi

+0

Was macht meinen Code in Ihrem Programm? Wenn Sie Zeile für Zeile debuggen und Bitmap öffnen, ist es am kleinsten oder nicht? – user7575308

+0

versuchen Sie, auf "Menü" zu schauen, wenn nicht auf FitXY oder etwas Similar Skala-Typ eingestellt – user7575308

Verwandte Themen