2013-05-25 25 views
9

mam ten kod:Android skalowanie ImageView z setImageBitmap

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

i

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); 

Po załadowaniu obrazu w ten sposób, bez skalowania wydaje się, że zostały wykonane. Jednak jeśli załaduję obraz przez setImageDrawable() r.res. Rozmiar obrazu wewnątrz ImageView został zmieniony. Jednak muszę użyć setImageBitmap(), ponieważ ładuję moje obrazy poprzez folder zasobów.

Czy brakuje mi tu jakiegoś ustawienia? To spowoduje, że Android zmieni rozmiar i skaluje mapę bitową, więc używa pełnej szerokości ImageView? Sądzę, że mogę to zrobić samemu w kodzie, ale od razu sądzę, że to, co chcę zrobić, będzie obsługiwane tylko przez ustawienie pewnych właściwości.

+1

Spróbuj użyć 'setImageDrawable() ' –

+0

setImageDrawable nie przyjmuje bitmapy. – Tom

+2

użyj CENTER_CROP jako scaletype AND WRAP_CONTENT dla szerokości – Blackbelt

Odpowiedz

13

Nie można ufać systemowi dla wszystkiego, co szczególnie androida, który czasami zachowuje się inaczej. Możesz zmienić rozmiar mapy bitowej.

height = (Screenwidth*originalHeight)/originalWidth; 

to wygeneruje odpowiednią wysokość. Szerokość jest równa szerokości ekranu, o której wspomniałeś.

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

Jak potrzebowałem trochę czasu, aby dowiedzieć się kompletny kod do tej pracy, jestem delegowania pełny przykład tutaj opierając się na poprzedniej odpowiedzi:

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); 
Powiązane problemy