Was ist der Unterschied zwischen den Skalentypen CENTER_INSIDE und FIT_CENTER?

143

Ich kann den Unterschied zwischen ImageView.ScaleType.CENTER_INSIDEund nicht erkennen ImageView.ScaleType.FIT_CENTER.

CENTER_INSIDE

Skalieren Sie das Bild gleichmäßig (behalten Sie das Seitenverhältnis des Bildes bei), sodass beide Abmessungen (Breite und Höhe) des Bildes gleich oder kleiner als die entsprechende Abmessung der Ansicht sind (minus Auffüllung).

FIT_CENTER

Berechnen Sie eine Skala, die das ursprüngliche src-Seitenverhältnis beibehält, aber auch sicherstellt, dass src vollständig in dst passt. Mindestens eine Achse (X oder Y) passt genau. Das Ergebnis ist innerhalb von dst zentriert.

Kann jemand den Unterschied zwischen den beiden beleuchten?

Keith
quelle

Antworten:

145

FIT_CENTER wird sicherstellen, dass die Quelle vollständig in den Container passt und entweder die horizontale oder die vertikale Achse genau ist.

CENTER_INSIDE zentriert das Bild im Container, anstatt die Kanten genau anzupassen.

Wenn Sie also eine quadratische Box mit einer Größe von 10 "x 10" und ein Bild mit einer Größe von 8 "x 8" hätten, befindet sich CENTER_INSIDE direkt in der Mitte der Box mit 2 "zwischen dem Quell- und dem Zielcontainer.

Mit dem FIT_CENTER würde dasselbe Bild aus dem obigen Beispiel in den gesamten Container passen, da die Seiten gleich sind und eine Achse mit dem Ziel übereinstimmt. Wenn Sie mit FIT_CENTER eine Box mit einer Größe von 5 "x 10" und ein Bild mit einer Größe von 5 "x 7" hätten, würde das Bild proportional skaliert, sodass eine der Achsen passt, das Bild jedoch immer noch in der Mitte zentriert Ziel.

Sie sind ähnlich, aber eine ist so erstellt, dass die Quelle das Ziel so weit wie möglich ausfüllt, während die andere das Bild nur innerhalb des Ziels zentriert.

Hoffe das klärt ein wenig

BlackHatSamurai
quelle
Beachten Sie, dass center/ centerInsideusw. das Bild nicht zentrieren, soweit ich das beurteilen kann. Zumindest für den Fall, dass das Bild kleiner als die Ansicht ist. Ich könnte falsch liegen.
Timmmm
4
es klingt, dass FIT_CENTER (fast) immer günstiger ist.
Cheng Yang
2
Das macht immer noch keinen Sinn, weil FIT_CENTERdas so ist At least one axis (X or Y) will fit exactly. Bedeutet das nicht, dass beide dasselbe tun?
Christopher Perry
45
Grundsätzlich ist die Dokumentation nicht klar, dass CENTER_INSIDE nicht UP (nur DOWN) skaliert
Ken
1
@Ken Das Szenario, in dem das Bild größer als das Ansichtsfeld ist, wird ignoriert. In diesem Fall CENTER_INSIDEwird es verkleinert und somit unnötig kompliziert. Die anderen Antworten erklären dies richtig und viel prägnanter.
Livven
245

Hier ist eine grafische Darstellung des Unterschieds zwischen CENTER_INSIDEund FIT_CENTER.


Verwendetes Bild (100 × 100):

Android_Robot_100.png


Kleine Bildansicht (75 × 50):

CENTER_INSIDE:

CENTER_INSIDE für eine kleine Bildansicht

FIT_CENTER:

FIT_CENTER für kleine Bildansicht

Beides CENTER_INSIDEund FIT_CENTERverkleinern das Bild.


Große Bildansicht (300 × 200):

CENTER_INSIDE:

CENTER_INSIDE für eine große Bildansicht

FIT_CENTER:

FIT_CENTER für große Bildansicht

CENTER_INSIDEvergrößert das Bild nicht, FIT_CENTERtut.


Der Android-Roboter wird aus von Google erstellten und freigegebenen Arbeiten reproduziert oder modifiziert und gemäß den in der Creative Commons 3.0 Attribution License beschriebenen Bedingungen verwendet.

Stich
quelle
50

Sie sind gleich, wenn das Bild größer als der Container ist. Wenn das Bild kleiner ist, vergrößert der Container CENTER_INSIDE das Bild NICHT, während FIT_CENTER dies tut.

Zarokka
quelle
1

Das gleiche gilt, wenn das Bild größer als der Container ist. Wenn das Bild kleiner ist, vergrößert der Container CENTER_INSIDE das Bild NICHT, während FIT_CENTER dies tut.

Code_Adda
quelle