2011-07-12 18 views
52

Chciałbym przeskalować obraz, aby zająć cały rozmiar obrazu. Jest to nieco inne niż użycie scaleType=fit_center, ponieważ fit_center zostawia pasma wokół obrazu, jeśli proporcje obrazu nie są dokładnie takie same jak proporcje obrazu. Zamiast tego chciałbym, aby obraz został wyśrodkowany i skalowany, aby całkowicie wypełnić widok otaczający, z nadmiarem odciętym.Skaluj obraz tak, aby wypełnić cały obraz ImageView w Androidzie

jestem w stanie tego dokonać poprzez obliczenie własne macierzy niestandardowego obrazu podczas onCreate():

final Display display = getWindowManager().getDefaultDisplay(); 
final float screenWidth = display.getWidth(); 
final float screenHeight = display.getHeight(); 
final float imageWidth = splashView.getDrawable().getIntrinsicWidth(); 
final float imageHeight = splashView.getDrawable().getIntrinsicHeight(); 
final Matrix splashMatrix = new Matrix(); 
final float scale = Math.max(screenHeight/imageHeight,screenWidth/imageWidth); 
splashMatrix.postScale(scale, scale); 
splashView.setImageMatrix(splashMatrix); 

Działa to dobrze, ale wydaje się, że nie musi być łatwiejszy z dala. Czy ktoś wie o sposobie skalowania obrazu w ImageView, jednocześnie zachowując proporcje obrazu i całkowicie wypełniając ImageView?

(Uwaga: w moim przypadku mój ImageView odbywa się na pełnym ekranie, więc używam getWindowManager().getDisplay() aby znaleźć żądany rozmiar obrazu nie można używać splashView.getWidth()/getHeight() ponieważ widok nie został rozplanowany i jeszcze robi. 't mieć rozmiar)

Odpowiedz

116

Można użyć android:scaleType="centerCrop". Zachowuje proporcje i skaluje obraz tak, jak chcesz.

Aby uzyskać więcej informacji prosimy przejść przez link poniżej

http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType

+1

Jak mogłem przegapić? – emmby

+2

Nie zachowuje proporcji! Mam layout_height = wrap_content, layout_width = fill_parent, a proporcje zniknęły, obraz ma szerokość ekranu, ale wysokość jest zła (jest za krótka, jak 40% wysokości, jaką powinien mieć). –

+9

Naprawiłem problem w powyższym komentarzu: android: adjustViewBounds = "true". –

Powiązane problemy