Qual é a diferença entre os tipos de escala CENTER_INSIDE e FIT_CENTER?

143

Não sei dizer a diferença entre ImageView.ScaleType.CENTER_INSIDEe ImageView.ScaleType.FIT_CENTER.

CENTER_INSIDE

Escale a imagem uniformemente (mantenha a proporção da imagem) para que ambas as dimensões (largura e altura) da imagem sejam iguais ou menores que a dimensão correspondente da vista (menos preenchimento).

FIT_CENTER

Calcule uma escala que manterá a proporção original do src, mas também garantirá que o src se ajuste totalmente ao dst. Pelo menos um eixo (X ou Y) caberá exatamente. O resultado é centralizado no dst.

Alguém pode esclarecer a diferença entre os dois?

Keith
fonte

Respostas:

145

FIT_CENTER garantirá que a fonte caiba completamente dentro do contêiner, e o eixo horizontal ou vertical será exato.

CENTER_INSIDE vai centralizar a imagem dentro do contêiner, em vez de fazer com que as bordas correspondam exatamente.

portanto, se você tivesse uma caixa quadrada de 10 "x 10" e uma imagem de 8 "x8", o CENTER_INSIDE estaria diretamente no meio da caixa com 2 "entre a origem e o contêiner de destino.

Com o FIT_CENTER, a mesma imagem do exemplo acima caberia em todo o contêiner, pois os lados são iguais e um eixo corresponde ao destino. Com FIT_CENTER, se você tivesse uma caixa de 5 "x 10" e uma imagem de 5 "x 7", a imagem seria dimensionada proporcionalmente, para que um dos eixos caiba, mas ainda centralizará a imagem dentro do destino.

Eles são semelhantes, mas um é feito para que a fonte preencha o destino o máximo possível, enquanto o outro apenas centraliza a imagem dentro do destino.

Espero que esclareça um pouco

BlackHatSamurai
fonte
Note que center/ centerInside, etc., na verdade, não centraliza a imagem, até onde eu sei. Pelo menos no caso em que a imagem é menor que a vista. Eu poderia estar errado.
precisa saber é o seguinte
4
parece que FIT_CENTER é (quase) sempre mais favorável.
precisa
2
Isso ainda não faz sentido, porque FIT_CENTERafirma isso At least one axis (X or Y) will fit exactly. Isso não implica que ambos façam a mesma coisa?
22413 Christopher Christopher
46
Basicamente, a documentação não está clara, pois CENTER_INSIDE não aumenta para cima (somente para baixo) #
Ken
1
@Ken Ignora o cenário em que a imagem é maior que a caixa de exibição; nesse caso CENTER_INSIDE, diminui a escala e, assim, torna-se desnecessariamente complicado. As outras respostas explicam isso corretamente e de maneira muito mais sucinta.
Livven
245

Aqui está uma ilustração gráfica da diferença entre CENTER_INSIDEe FIT_CENTER.


Imagem usada (100 × 100):

Android_Robot_100.png


Visualização de imagem pequena (75 × 50):

CENTER_INSIDE:

CENTER_INSIDE para visualização de imagem pequena

FIT_CENTER:

FIT_CENTER para visualização em imagem pequena

Ambos CENTER_INSIDEe FIT_CENTERencolher a imagem.


Visualização de imagem grande (300 × 200):

CENTER_INSIDE:

CENTER_INSIDE para visualização de imagem grande

FIT_CENTER:

FIT_CENTER para visualização de imagem grande

CENTER_INSIDEnão aumenta a imagem, FIT_CENTERaumenta.


O robô Android é reproduzido ou modificado a partir de um trabalho criado e compartilhado pelo Google e usado de acordo com os termos descritos na Licença de Atribuição do Creative Commons 3.0.

Pang
fonte
50

Eles são os mesmos se a imagem for maior que o contêiner. Se a imagem for menor, o contêiner CENTER_INSIDE NÃO aumentará a imagem enquanto FIT_CENTER.

Zarokka
fonte
1

o mesmo se a imagem for maior que o contêiner. Se a imagem for menor, o contêiner CENTER_INSIDE NÃO aumentará a imagem enquanto FIT_CENTER.

Code_Adda
fonte