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 centerInsidesię fitCenter. Ten sam efekt, niedobry. Zmieniłem centerInsidesię 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 centerCropna 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 centerCropustawienie. Zniekształci obraz w pionie zgodnie z wysokością widoku.
android:scaleType="fitCenter"?