Это сложный вопрос, на который нужно ответить, потому что нам нужно углубиться в некоторые мельчайшие детали того, как ImageView на самом деле рисует изображение на экране.
Первое, что нужно установить, - это то, что есть два прямоугольника, которые влияют на поведение рисования ImageView. Первый - это прямоугольник, определенный размерами ImageView , игнорируя заполнение . Второй - это прямоугольник, определяемый размерами ImageView с учетом заполнения . (Очевидно, что если отступ равен 0, то они будут одинаковыми.)
Следующее, что нужно установить, это то, что все ImageViews имеют тип масштаба , который определяет, как изображение растягивается и / или обрезается, когда внутренний размер изображения не соответствует размеру прямоугольника, которым оно является. втягивается.
Тип масштаба по умолчанию - FIT_CENTER
, который уменьшает изображение, чтобы оно соответствовало границам вида + отступам (т. Е. Изображение будет нарисовано внутри прямоугольника, который учитывает отступы). Поскольку изображение рисуется внутри прямоугольника заполнения, android:cropToPadding
не имеет никакого эффекта.
Однако другие типы шкал работают по-другому. Тип масштаба CENTER
просто помещает изображение в середину вида, но не выполняет масштабирование (поэтому изображение будет обрезано, если оно больше, чем вид). В этом случае android:cropToPadding
определяет, будет ли изображение обрезаться только границами вида или также будет дополнено отступом вида.
Картинка стоит тысячи слов:
На этом изображении показано то же изображение 72x72 при просмотре 72x72 с заполнением 16dp и CENTER
в масштабе. Левый ImageView имеет android:cropToPadding="false"
, а правый ImageView имеет android:cropToPadding="true"
.