В чем разница между типами шкалы CENTER_INSIDE и FIT_CENTER?

Я не могу отличить ImageView.ScaleType.CENTER_INSIDE от ImageView.ScaleType.FIT_CENTER.

CENTER_INSIDE

Равномерно масштабируйте изображение (сохраняйте соотношение сторон изображения) так, чтобы оба размера (ширина и высота) изображения были равны или меньше соответствующего размера представления (без заполнения).

FIT_CENTER

Вычислите масштаб, который будет поддерживать исходное соотношение сторон src, но также будет гарантировать, что src полностью помещается в dst. По крайней мере, одна ось (X или Y) подойдет точно. Результат сосредоточен внутри dst.

Может ли кто-нибудь осветить разницу между ними?


person Keith    schedule 05.07.2012    source источник
comment
Они идентичны, за исключением того, что если поле на самом деле БОЛЬШЕ, чем изображение, CENTER_INSIDE НЕ будет расширять изображение.   -  person Fattie    schedule 30.03.2021
comment
@Fattie Спасибо! Имеет смысл, если вы это знаете.   -  person Joshua Pinter    schedule 29.04.2021


Ответы (3)


FIT_CENTER гарантирует, что источник полностью помещается внутри контейнера, а горизонтальная или вертикальная ось будет точной.

CENTER_INSIDE будет центрировать изображение внутри контейнера, а не делать края точно совпадающими.

поэтому, если у вас есть квадратный блок размером 10 "x 10" и изображение размером 8 "x8", CENTER_INSIDE будет прямо в середине поля с 2 "между исходным и целевым контейнером.

С FIT_CENTER то же изображение из приведенного выше примера будет соответствовать всему контейнеру, потому что стороны равны, а одна ось будет соответствовать месту назначения. С FIT_CENTER, если у вас есть прямоугольник размером 5 на 10 дюймов и изображение размером 5 на 7 дюймов, изображение будет пропорционально масштабировано, так что одна из осей будет соответствовать, но все равно будет центрировать изображение внутри место назначения.

Они похожи, но один сделан так, что источник максимально заполняет место назначения, а другой просто центрирует изображение внутри места назначения.

Надеюсь, что это немного проясняет

person BlackHatSamurai    schedule 05.07.2012
comment
Обратите внимание, что _1 _ / _ 2_ и т. Д. На самом деле не центрируют изображение, насколько я могу судить. По крайней мере, в том случае, когда изображение меньше, чем вид. Я могу ошибаться. - person Timmmm; 21.11.2012
comment
похоже, что FIT_CENTER (почти) всегда более благоприятен. - person cheng yang; 06.03.2013
comment
Это зависит от того, что вы собираетесь делать. Если вы хотите, чтобы что-то было сосредоточено точно посередине, то CENTER_INSIDE будет лучше. Опять же, все зависит от того, что вы делаете :) - person BlackHatSamurai; 06.03.2013
comment
Это все еще не имеет смысла, потому что FIT_CENTER утверждает, что At least one axis (X or Y) will fit exactly. Разве это не означает, что оба делают одно и то же? - person Christopher Perry; 22.03.2013
comment
Нет, совсем нет. Есть потенциал, что они могли бы, но это зависит от размера изображения. Прочтите мой ответ еще раз, он должен объяснить. Центр внутри не всегда совпадает с одной из осей. - person BlackHatSamurai; 23.03.2013
comment
По сути, в документации не ясно, что CENTER_INSIDE не масштабируется UP (только DOWN) - person Ken; 22.05.2014
comment
@ Ливвен, почему мой ответ вводит в заблуждение? - person BlackHatSamurai; 30.03.2016
comment
@Ken Он игнорирует сценарий, когда изображение больше, чем окно просмотра, и в этом случае CENTER_INSIDE уменьшает его и, таким образом, также становится излишне сложным. Другие ответы объясняют это правильно и более лаконично. - person Livven; 31.03.2016

Вот графическая иллюстрация разницы между CENTER_INSIDE и FIT_CENTER.


Используемое изображение (100 × 100):

Android_Robot_100.png


Просмотр уменьшенного изображения (75 × 50):

CENTER_INSIDE:

CENTER_INSIDE для просмотра небольших изображений

FIT_CENTER:

FIT_CENTER для просмотра небольших изображений

И CENTER_INSIDE, и FIT_CENTER уменьшают изображение.


Просмотр большого изображения (300 × 200):

CENTER_INSIDE:

CENTER_INSIDE для просмотра больших изображений

FIT_CENTER:

FIT_CENTER для просмотра больших изображений

CENTER_INSIDE не увеличивает изображение, FIT_CENTER делает.


Робот Android воспроизводится или модифицируется на основе работы, созданной и совместно используемой Google, и используется в соответствии с условиями, описанными в лицензии Creative Commons 3.0 Attribution License.

person Pang    schedule 10.10.2013

Они такие же, если изображение больше контейнера. Если изображение меньше, то контейнер CENTER_INSIDE НЕ будет увеличивать изображение, в то время как FIT_CENTER будет.

person Zarokka    schedule 18.06.2013