应用材质devise触摸纹波到ImageButton?

我有一个图像button,它不响应点击时的触摸animation,因为它是一个静态图像,不像棒棒糖上的内置涟漪效应。 我想添加材料devise涟漪触摸效果的形象,但似乎无法find一个方法来实现它。 我可以在图像上设置一个颜色filter,但这不是涟漪效应。 我试图做的一个例子是,当您在Google Play音乐中放置相册封面图片时,图片上会出现阴影涟漪。

为了更好的结果:

<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" /> 

或者,如果您的目标是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"/> 

我从i.shadrin( 这里 )和Nicolars( 这里 )得到了很好的答案。

他们的答案之间的区别是?attr/selectableItemBackgroundBorderless可以给你一个android.view.InflateException ,所以?android:attr/selectableItemBackground是解决scheme。

FWIW,我不知道为什么发生exception,因为第一个答案在我所有的旧项目中工作正常,但是在我最近的项目中(可能是因为应用程序主题= android:Theme.Material ?)。

奇怪的是,虽然涟漪效应已经显示出来了,但ImageButton却是这样的,所以解决办法是:

  • 要使用android:foreground="?android:attr/selectableItemBackgroundBorderless"而不是android:background="?android:attr/selectableItemBackgroundBorderless"

希望它能帮助你,如果你面对相同的。