45

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

ответ

146

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

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

Это лучший ответ - дайте круговой ощущения, а также эффект пульсации, спасибо. – ElliotM

+2

Мне нравится этот ответ! – grAPPfruit

+0

Как вы инвертируете эффект для использования на темном фоне? –

19

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

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

Что делать, если у меня уже есть возможность рисования в качестве фона? – JohannaNoobie

-1

Или, наоборот, если вы ориентируетесь 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"/> 
+0

этот ответ не работает. – JohannaNoobie

0

Я получил хорошие ответы от i.shadrin (here) и Nicolar с (here).

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

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

Самое странное, что происходит в том, что несмотря на то, Волновой эффект был показан именно из-ограничивающая ImageButton, поэтому решение:

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

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

Смежные вопросы