Jaka jest różnica między typami skal CENTER_INSIDE i FIT_CENTER?

143

Nie potrafię odróżnić ImageView.ScaleType.CENTER_INSIDEi ImageView.ScaleType.FIT_CENTER.

CENTER_INSIDE

Skaluj obraz równomiernie (zachowaj proporcje obrazu), tak aby oba wymiary (szerokość i wysokość) obrazu były równe lub mniejsze niż odpowiadający wymiar widoku (bez wypełnienia).

FIT_CENTER

Oblicz skalę, która zachowa oryginalny współczynnik proporcji src, ale zapewni również, że src zmieści się całkowicie w dst. Przynajmniej jedna oś (X lub Y) będzie dokładnie pasować. Wynik jest wyśrodkowany wewnątrz dst.

Czy ktoś może wyjaśnić różnicę między nimi?

Keith
źródło

Odpowiedzi:

145

FIT_CENTER upewni się, że źródło całkowicie mieści się w pojemniku, a oś pozioma lub pionowa będzie dokładna.

CENTER_INSIDE wyśrodkuje obraz wewnątrz kontenera, zamiast dokładnie dopasowywać krawędzie.

więc gdybyś miał kwadratowe pudełko o wymiarach 10 "x 10" i obraz o rozmiarze 8 "x8", CENTER_INSIDE znajdowałby się bezpośrednio w środku pudełka z 2 "między źródłem a kontenerem docelowym.

W przypadku FIT_CENTER ten sam obraz z powyższego przykładu pasowałby do całego kontenera, ponieważ boki są równe, a jedna oś będzie pasować do celu. Z FIT_CENTER, gdybyś miał ramkę o wymiarach 5 "x 10" i obraz o wymiarach 5 "x 7", obraz byłby proporcjonalnie skalowany, więc jedna z osi pasowałaby, ale nadal wyśrodkowałaby obraz wewnątrz Miejsce docelowe.

Są podobne, ale jeden jest wykonany tak, aby źródło wypełniało miejsce docelowe tak bardzo, jak to możliwe, a drugi po prostu centruje obraz wewnątrz miejsca docelowego.

Mam nadzieję, że to trochę wyjaśnia

BlackHatSamurai
źródło
Zauważ, że center/ centerInsideitp. Nie wyśrodkowują obrazu, o ile wiem. Przynajmniej w przypadku, gdy obraz jest mniejszy niż widok. Mogę się mylić.
Timmmm
4
wydaje się, że FIT_CENTER jest (prawie) zawsze korzystniejszy.
Cheng yang
2
To nadal nie ma sensu, ponieważ tak FIT_CENTERstwierdza At least one axis (X or Y) will fit exactly. Czy to nie oznacza, że ​​obaj robią to samo?
Christopher Perry,
46
Zasadniczo dokumentacja nie jest jasna, że ​​CENTER_INSIDE nie skaluje się w górę (tylko w dół)
Ken,
1
@Ken Ignoruje scenariusz, w którym obraz jest większy niż okno widoku, w którym to przypadku CENTER_INSIDEzmniejsza go, a tym samym staje się niepotrzebnie skomplikowany. Inne odpowiedzi wyjaśniają to poprawnie i znacznie bardziej zwięźle.
Livven
245

Oto graficzna ilustracja różnicy między CENTER_INSIDEi FIT_CENTER.


Użyty obraz (100 × 100):

Android_Robot_100.png


Widok małego zdjęcia (75 × 50):

CENTER_INSIDE:

CENTER_INSIDE dla małego widoku obrazu

FIT_CENTER:

FIT_CENTER dla małego widoku obrazu

Oba CENTER_INSIDEi FIT_CENTERzmniejsz obraz.


Widok dużego obrazu (300 × 200):

CENTER_INSIDE:

CENTER_INSIDE dla widoku dużego obrazu

FIT_CENTER:

FIT_CENTER dla widoku dużego obrazu

CENTER_INSIDEnie powiększa obrazu FIT_CENTER.


Robot Android jest powielany lub modyfikowany na podstawie pracy stworzonej i udostępnionej przez Google i używany zgodnie z warunkami opisanymi w licencji Creative Commons 3.0 Attribution License.

Ostry ból
źródło
50

Są takie same, jeśli obraz jest większy niż kontener. Jeśli obraz jest mniejszy, kontener CENTER_INSIDE NIE przeskaluje obrazu w górę, podczas gdy FIT_CENTER tak.

Zarokka
źródło
1

to samo, jeśli obraz jest większy niż kontener. Jeśli obraz jest mniejszy, kontener CENTER_INSIDE NIE przeskaluje obrazu w górę, podczas gdy FIT_CENTER tak.

Code_Adda
źródło