Применить материал Дизайн сенсорный пульсации к ImageButton?


У меня есть imagebutton, который не реагирует на сенсорную анимацию при нажатии, потому что это статическое изображение в отличие от обычных кнопок на леденце, которые поставляются со встроенным эффектом пульсации. Я хотел бы добавить эффект прикосновения к изображению material design ripple, но не могу найти способ его реализовать. Я могу установить цветовой фильтр над изображением, но это не эффект пульсации. Пример того, что я пытаюсь сделать, - это когда вы держите изображение обложки альбома в Google Play Music и тень рябь движется по изображению.

4 52

4 ответа:

для еще лучшего результата:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/ic_button"
    android:background="?attr/selectableItemBackgroundBorderless"
/>

вы можете просто добавить фон к вашему ImageButton следующим образом:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/btn_dialog"
    android:background="?android:attr/selectableItemBackground" />

я получил хорошие ответы от и. Шадрина (здесь) и Николай (здесь).

разница между их ответами заключается в том, что ?attr/selectableItemBackgroundBorderless может дать вам android.view.InflateException, Так что ?android:attr/selectableItemBackground это решение.

FWIW, я не знаю, почему происходит исключение, потому что первый ответ отлично работал во всех моих старых проектах, но в моем недавнем проекте нет (может быть, потому что тема приложения = android:Theme.Material?).

странная вещь, которая происходила в том, что хотя эффект пульсации был показан, он выходил за пределы ImageButton, поэтому решение:

  • использовать android:foreground="?android:attr/selectableItemBackgroundBorderless" вместо android:background="?android:attr/selectableItemBackgroundBorderless"

надеюсь, что это поможет вам, если вы столкнулись с тем же.

или, в качестве альтернативы, если вы нацелены на 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"/>