У меня есть кнопка изображения, которая не реагирует на анимацию при нажатии, потому что это статическое изображение, в отличие от обычных кнопок на леденец, которые имеют встроенный эффект пульсации. Я хотел бы добавить эффект создания эффекта соприкосновения материала к изображению, но, похоже, не может найти способ его реализовать. Я могу установить цветной фильтр по изображению, но это не эффект пульсации. Пример того, что я пытаюсь сделать, - это когда вы держите обложку обложки альбома в Google Play Музыке, а теневая пульсация перемещается по изображению.
Применить дизайн материала Touch Ripple к ImageButton?
Ответ 1
Для еще лучшего результата:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_button"
android:background="?attr/selectableItemBackgroundBorderless"
/>
Ответ 2
Вы можете просто добавить фон в свой ImageButton следующим образом:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/btn_dialog"
android:background="?android:attr/selectableItemBackground" />
Ответ 3
Я получил хорошие ответы от i.shadrin(здесь) и Nicolars (здесь).
Разница между их ответами заключается в том, что ?attr/selectableItemBackgroundBorderless
может дать вам android.view.InflateException
, поэтому решение ?android:attr/selectableItemBackground
является решением.
FWIW, я не знаю, почему происходит исключение, потому что первый ответ работал отлично во всех моих старых проектах, но в моем недавнем проекте не (возможно, из-за темы приложения = android:Theme.Material
?).
Странная вещь, которая происходила, состоит в том, что, хотя эффект пульсации был показан, он не ограничивал ImageButton, поэтому решение:
- Чтобы использовать
android:foreground="?android:attr/selectableItemBackgroundBorderless"
вместоandroid:background="?android:attr/selectableItemBackgroundBorderless"
Надеюсь, он поможет вам, если вы столкнулись с тем же.
Ответ 4
Или, в качестве альтернативы, если вы используете API 21+, используйте backgroundTint
:
<ImageButton
android:backgroundTint="@color/white"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/ic_button"
style="@style/Widget.AppCompat.ImageButton"/>