¿Cuál es la diferencia entre los tipos de escala CENTER_INSIDE y FIT_CENTER?

143

No puedo decir la diferencia entre ImageView.ScaleType.CENTER_INSIDEy ImageView.ScaleType.FIT_CENTER.

CENTER_INSIDE

Escale la imagen uniformemente (mantenga la relación de aspecto de la imagen) de modo que ambas dimensiones (ancho y alto) de la imagen sean iguales o menores que la dimensión correspondiente de la vista (menos el relleno).

FIT_CENTER

Calcule una escala que mantenga la relación de aspecto src original, pero también garantizará que src se ajuste completamente dentro de dst. Al menos un eje (X o Y) se ajustará exactamente. El resultado se centra dentro de dst.

¿Alguien puede iluminar la diferencia entre los dos?

Keith
fuente

Respuestas:

145

FIT_CENTER se asegurará de que la fuente encaje completamente dentro del contenedor y que el eje horizontal o vertical sea exacto.

CENTER_INSIDE centrará la imagen dentro del contenedor, en lugar de hacer que los bordes coincidan exactamente.

así que si tuviera una caja cuadrada de 10 "x 10" y una imagen de 8 "x8", CENTER_INSIDE estaría directamente en el medio de la caja con 2 "entre el contenedor de origen y el de destino.

Con el FIT_CENTER, esa misma imagen del ejemplo anterior, se ajustaría a todo el contenedor, porque los lados son iguales y un eje coincidirá con el destino. Con FIT_CENTER, si tuviera una caja de 5 "x 10" y una imagen de 5 "x 7", la imagen se escalaría proporcionalmente, por lo que uno de los ejes cabría, pero aún así centraría la imagen dentro del destino.

Son similares, pero uno está hecho para que la fuente llene el destino tanto como sea posible, mientras que el otro solo centra la imagen dentro del destino.

Espero que aclare un poco

BlackHatSamurai
fuente
Tenga en cuenta que center/ centerInside, etc. en realidad no centran la imagen, por lo que puedo decir. Al menos en el caso cuando la imagen es más pequeña que la vista. Podría estar equivocado.
Timmmm
44
Parece que FIT_CENTER es (casi) siempre más favorable.
Cheng Yang
2
Esto todavía no tiene sentido porque lo FIT_CENTERdice At least one axis (X or Y) will fit exactly. ¿No implica esto que ambos hacen lo mismo?
Christopher Perry
46
Básicamente, la documentación no está clara de que CENTER_INSIDE no se escala hacia ARRIBA (solo hacia ABAJO)
Ken
1
@Ken Ignora el escenario en el que la imagen es más grande que el cuadro de vista, en cuyo caso la CENTER_INSIDEreduce y, por lo tanto, también se vuelve innecesariamente complicada. Las otras respuestas explican esto correctamente y mucho más sucintamente.
Livven
245

Aquí hay una ilustración gráfica de la diferencia entre CENTER_INSIDEy FIT_CENTER.


Imagen utilizada (100 × 100):

Android_Robot_100.png


Vista de imagen pequeña (75 × 50):

CENTER_INSIDE:

CENTER_INSIDE para ver imágenes pequeñas

FIT_CENTER:

FIT_CENTER para ver imágenes pequeñas

Ambos CENTER_INSIDEy FIT_CENTERencoger la imagen.


Vista de imagen grande (300 × 200):

CENTER_INSIDE:

CENTER_INSIDE para ver imágenes grandes

FIT_CENTER:

FIT_CENTER para ver imágenes grandes

CENTER_INSIDEno amplía la imagen, lo FIT_CENTERhace.


El robot Android se reproduce o modifica a partir del trabajo creado y compartido por Google y se utiliza de acuerdo con los términos descritos en la Licencia de atribución Creative Commons 3.0.

Angustia
fuente
50

Son iguales si la imagen es más grande que el contenedor. Si la imagen es más pequeña, el contenedor CENTER_INSIDE NO escalará la imagen hacia arriba mientras que FIT_CENTER lo hará.

Zarokka
fuente
1

lo mismo si la imagen es más grande que el contenedor. Si la imagen es más pequeña, el contenedor CENTER_INSIDE NO escalará la imagen hacia arriba mientras que FIT_CENTER lo hará.

Code_Adda
fuente