2014-07-25 13 views
14

Mam niestandardowy widok (1066 x 738) i przechodzę obraz bitmapy (720x343). Chcę przeskalować bitmapę, aby dopasować się do widoku niestandardowego, nie przekraczając granic rodzica.Formatowanie rozmiaru bitmapy zachowując rozmiar Androida

enter image description here

chcę osiągnąć coś takiego:

enter image description here

Jak należy obliczyć wielkość bitmapy?

Jak obliczyć nową szerokość/wysokość:

public static Bitmap getScaledBitmap(Bitmap b, int reqWidth, int reqHeight) 
    { 
     int bWidth = b.getWidth(); 
     int bHeight = b.getHeight(); 

     int nWidth = reqWidth; 
     int nHeight = reqHeight; 

     float parentRatio = (float) reqHeight/reqWidth; 

     nHeight = bHeight; 
     nWidth = (int) (reqWidth * parentRatio); 

     return Bitmap.createScaledBitmap(b, nWidth, nHeight, true); 
    } 

Ale ja osiągnięcia to:

enter image description here

+0

Możesz dodać flagę 'scaleType' do pliku XML widoku niestandardowego. http://developer.android.com/reference/android/widget/ImageView.ScaleType.html –

+0

To nie jest obrazViewView! –

+0

Ah, ja (niesłusznie) założyłem twój niestandardowy widok rozszerzony ImageView ... moja wina –

Odpowiedz

58

Należy spróbować użyć macierz transformacji zbudowany dla ScaleToFit.CENTER. Na przykład:

Matrix m = new Matrix(); 
m.setRectToRect(new RectF(0, 0, b.getWidth(), b.getHeight()), new RectF(0, 0, reqWidth, reqHeight), Matrix.ScaleToFit.CENTER); 
return Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), m, true); 
+1

nie działa dla mnie. Próbowałem zmniejszyć rozmiar obrazu, w rozdzielczościach, używając tego, ale nie działał. – NarendraJi

+0

@DroidWormNarendra można nazwać 'Bitmap.createScaledBitmap (out, reqWidth, reqHeight, false);', to zmniejszy rozmiar obrazu. – zionpi

+0

@matiash, proszę spojrzeć na ten numer: http://stackoverflow.com/questions/42927337/scaling-bitmaps-of-huge-images-from-url-into-image-view-cording-to-device- reso – Siddharth

Powiązane problemy