Często pytany, nigdy nie odpowiadał (przynajmniej nie w powtarzalny sposób).
Mam widok obrazu z obrazem, który jest mniejszy niż widok. Chcę przeskalować obraz do szerokości ekranu i dostosować wysokość ImageView, aby odzwierciedlić proporcjonalnie poprawną wysokość obrazu.
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Skutkuje to wyśrodkowaniem obrazu w jego oryginalnym rozmiarze (mniejszym niż szerokość ekranu) z marginesami z boku. Nie dobrze.
Więc dodałem
android:adjustViewBounds="true"
Ten sam efekt, niedobry. dodałem
android:scaleType="centerInside"
Ten sam efekt, niedobry. Zmieniłem centerInside
się fitCenter
. Ten sam efekt, niedobry. Zmieniłem centerInside
się centerCrop
.
android:scaleType="centerCrop"
Wreszcie obraz jest skalowany do szerokości ekranu - ale przycięty na górze i na dole! Więc zmieniłem centerCrop
na fitXY
.
android:scaleType="fitXY"
Teraz obraz jest skalowany do szerokości ekranu, ale nie jest skalowany na osi Y, co powoduje zniekształcenie obrazu.
Usunięcie android:adjustViewBounds="true"
nie ma żadnego efektu. Dodanie android:layout_gravity
, jak zasugerowano w innym miejscu, znowu nie ma żadnego efektu.
Próbowałem innych kombinacji - bezskutecznie. Więc proszę, czy ktoś wie:
Jak skonfigurować XML ImageView, aby wypełniał szerokość ekranu, przeskalował mniejszy obraz, aby wypełnić cały widok, wyświetlając obraz ze współczynnikiem proporcji bez zniekształceń i przycinania?
EDYCJA: Próbowałem też ustawić dowolną wysokość liczbową. Ma to wpływ tylko na centerCrop
ustawienie. Zniekształci obraz w pionie zgodnie z wysokością widoku.
android:scaleType="fitCenter"
?