ImageView android: cropToPadding, что он на самом деле делает? - PullRequest
1 голос
/ 12 июня 2019

Я просмотрел документацию для тега android:cropToPadding здесь , там только сказано:

Если значение true, изображение будет обрезано, чтобы поместиться в его отступы.

Может быть логическим значением, таким как "true" или "false".

, что для меня довольно странно понять.

У меня есть ImageView внутри моего приложения (которое было разработано кем-то другим):

<ImageView
      android:layout_width="125dp"
      android:layout_height="125dp"
      android:layout_gravity="center"
      android:maxWidth="100dp"
      android:padding="20dp" />

Этот ImageView имел тег cropToPadding внутри, на главном экране было как 20 ImageView, у которого все это былотеги внутри них, и приложение, очевидно, занимало время для загрузки, поскольку было больше изображений, но затем удаление изображений не было вариантом, поэтому я находил ненужные вещи и пытался оптимизировать макет, когда натолкнулся на этот тег.

Удаление этого тега не изменило изображений, которые были показаны внутри ImageView, но должна быть какая-то причина, по которой каждое изображение содержало этот тег.Поэтому я начал находить, что делает этот тег, и в документации не очень понятно, почему этот тег следует использовать.

Может кто-нибудь объяснить, что этот тег делает с изображением?Я обнаружил не так много ресурсов, все, что я нашел, было «Это обрезает изображение для заполнения», что это значит!Я знаю, что такое заполнение, я знаю, что такое обрезка, но что означает «Устанавливает, будет ли этот ImageView обрезаться до заполнения»?

1 Ответ

1 голос
/ 12 июня 2019

Это сложный вопрос, на который нужно ответить, потому что нам нужно углубиться в некоторые мельчайшие детали того, как ImageView на самом деле рисует изображение на экране.

Первое, что нужно установить, - это то, что есть два прямоугольника, которые влияют на поведение рисования ImageView. Первый - это прямоугольник, определенный размерами ImageView , игнорируя заполнение . Второй - это прямоугольник, определяемый размерами ImageView с учетом заполнения . (Очевидно, что если отступ равен 0, то они будут одинаковыми.)

Следующее, что нужно установить, это то, что все ImageViews имеют тип масштаба , который определяет, как изображение растягивается и / или обрезается, когда внутренний размер изображения не соответствует размеру прямоугольника, которым оно является. втягивается.

Тип масштаба по умолчанию - FIT_CENTER, который уменьшает изображение, чтобы оно соответствовало границам вида + отступам (т. Е. Изображение будет нарисовано внутри прямоугольника, который учитывает отступы). Поскольку изображение рисуется внутри прямоугольника заполнения, android:cropToPadding не имеет никакого эффекта.

Однако другие типы шкал работают по-другому. Тип масштаба CENTER просто помещает изображение в середину вида, но не выполняет масштабирование (поэтому изображение будет обрезано, если оно больше, чем вид). В этом случае android:cropToPadding определяет, будет ли изображение обрезаться только границами вида или также будет дополнено отступом вида.

Картинка стоит тысячи слов:

enter image description here

На этом изображении показано то же изображение 72x72 при просмотре 72x72 с заполнением 16dp и CENTER в масштабе. Левый ImageView имеет android:cropToPadding="false", а правый ImageView имеет android:cropToPadding="true".

...