Развернуть интерактивную область ImageView с помощью прокладки?
У меня есть ImageView, и я хочу, чтобы он был кликабельным. Само изображение составляет всего 32x32 пикселя, но я хочу, чтобы область с кликами была больше, чтобы было легче попасть. Я надеялся, что смогу установить значения полей макета, чтобы увеличить размер кликируемой области изображения:
<ImageView
layout_width="32dip"
layout_height="32dip"
layout_margin="20dip" />
Это не работает, я могу просто восстановить ресурс изображения, чтобы вокруг него была более прозрачная область. Это немного раздражает, потому что трудно настроить, если мне когда-либо понадобится изменить зону с клики. Это не просто один png, это stelstististable, поэтому я должен изменить размер 3 разных png, если мне когда-либо понадобится настроить зону с кликом.
Что-нибудь еще я могу сделать?
Спасибо
Ответы
Ответ 1
Предложения (никогда не пробовал сам):
-
Создайте ImageView как можно больше, чем поместите в него изображение без масштабирования
ImageView.setScaleType(ImageView.ScaleType.CENTER).
-
Подход к грубой силе: создайте новый более крупный png, который имеет исходное изображение с центром, а остальная часть прозрачна.
Ответ 2
Используйте прокладку. макеты листа используются, если для вставки пространства вне границы вида.
для равномерного заполнения со всех сторон
<ImageView
android:padding="20dip" />
или для установки прокладки с каждой стороны
<ImageView
android:paddingLeft="10dip"
android:paddingRight="15dip"
android:paddingTop="23dip"
android:paddingBottom="12dip" />
Надеюсь, что это поможет!
Ответ 3
Вместо изменения размера изображения (ответ Питера Кнего) или увеличения заполнения (ответ Саймона) я предлагаю установить атрибуты minWidth
и minHeight
в комбинации с scaleType="center"
:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="40dp"
android:minHeight="40dp"
android:scaleType="center"
android:src="@drawable/your_image" />
Это гарантирует, что маленькие изображения имеют размер как минимум 40x40dp, а изображение не масштабируется, если оно меньше. Если в один прекрасный день изображение будет заменено другим изображением, большим, чем minWidth
и minHeight
, оно не станет больше 40x40dp, поскольку оно будет уменьшено. Таким образом, всегда гарантируется минимальный размер клика 40x40dp, и изображение всегда отображается хорошо.