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

143

Я не могу сказать разницу между ImageView.ScaleType.CENTER_INSIDEи ImageView.ScaleType.FIT_CENTER.

CENTER_INSIDE

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

FIT_CENTER

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

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

Кит
источник

Ответы:

145

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

CENTER_INSIDE собирается центрировать изображение внутри контейнера, а не выравнивать края точно.

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

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

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

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

BlackHatSamurai
источник
Обратите внимание, что center/ centerInsideи т. Д., Насколько я могу судить, на самом деле не центрируют изображение. По крайней мере, в случае, когда изображение меньше, чем вид. Я могу ошибаться.
Тимммм
4
кажется, что FIT_CENTER (почти) всегда более выгоден.
Ченг Ян
2
Это все еще не имеет смысла, потому что FIT_CENTERутверждает это At least one axis (X or Y) will fit exactly. Не означает ли это, что оба делают одно и то же?
Кристофер Перри
46
По сути, в документации не ясно, что CENTER_INSIDE не масштабируется (только ВНИЗ)
Кен
1
@Ken Он игнорирует сценарий, в котором изображение больше, чем поле просмотра, и в этом случае CENTER_INSIDEего масштабирование уменьшается, что также усложняет задачу. Другие ответы объясняют это правильно и более кратко.
Ливвен
245

Вот графическая иллюстрация разницы между 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.

острая боль
источник
50

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

Zarokka
источник
1

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

Code_Adda
источник