Подтвердить что ты не робот

Применить дизайн материала Touch Ripple к ImageButton?

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

4b9b3361

Ответ 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"/>