2013-05-25 5 views
9

Ich habe diesen Code:Android Skalierung von Imageview setImageBitmap

<ImageView 
android:id="@+id/listitem_logo" 
android:layout_width="match_parent"         
android:layout_height="wrap_content" /> 

und

imageview_logo.setImageBitmap(bit); // comes from assets 
imageview_logo.setAdjustViewBounds(true);   
imageview_logo.setScaleType(ImageView.ScaleType.FIT_CENTER); 
imageview_logo.setBackgroundColor(0x00000000); 
imageview_logo.setPadding(0, 0, 0, 0); 
imageview_logo.setVisibility(v.VISIBLE); 

Wenn das Bild auf diese Weise geladen wird, scheint keine Skalierung durchgeführt worden zu sein. Allerdings, wenn ich ein Bild über setImageDrawable() r.res laden. das Bild innerhalb der ImageView wird in der Größe geändert. Allerdings muss ich setImageBitmap() verwenden, da ich meine Bilder durch den Ordner "Assets" geladen habe.

Fehle ich hier etwas Einstellung? Das wird Android Größe ändern und die Bitmap skalieren, so dass es die volle Breite des ImageView verwendet? Ich schätze, ich kann es selbst im Code tun, aber ich würde denken, dass ich das, was ich tun möchte, nur dadurch unterstützen würde, indem ich einige Eigenschaften setze.

+1

Versuchen Sie es mit 'setImageDrawable() ' –

+0

setImageDrawable akzeptiert keine Bitmap. – Tom

+2

Verwenden Sie CENTER_CROP als Skalentyp und WRAP_CONTENT für die Breite – Blackbelt

Antwort

13

Kann System für alles nicht besonders android vertrauen, das sich manchmal sehr unterschiedlich benimmt. Sie können die Größe der Bitmap ändern.

height = (Screenwidth*originalHeight)/originalWidth; 

Dies wird die entsprechende Höhe generieren. Breite entspricht der Bildschirmbreite, wie Sie bereits erwähnt haben.

Bitmap pq=Bitmap.createScaledBitmap(pq,Screenwidth,height, true); 
5

Da ich ein wenig Zeit benötigt, um den vollständigen Code, um herauszufinden, diese Arbeit zu machen, ich bin ein vollständiges Beispiel Posting hier auf der vorherigen Antwort unter Berufung:

ImageView bikeImage = (ImageView) view.findViewById(R.id.bikeImage); 
    AssetLoader assetLoader = new AssetLoader(getActivity()); 
    Bitmap bitmap = assetLoader.getBitmapFromAssets(
       Constants.BIKES_FOLDER + "/" + bike.getName().toLowerCase() 
         .replace(' ', '_').replace('-', '_') + ".png"); 
    int width = getActivity().getResources().getDisplayMetrics().widthPixels; 
    int height = (width*bitmap.getHeight())/bitmap.getWidth(); 
    bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true); 
    bikeImage.setImageBitmap(bitmap);