点击时如何在button上制作一个圆形的波纹?

背景

在Android的拨号器应用程序中,当您开始search某些内容时,单击EditText左侧的箭头button,您会得到一个循环的连锁反应:

在这里输入图像说明

问题

我也尝试过,但我有一个长方形的:

<ImageButton android:id="@+id/navButton" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_vertical" android:layout_marginLeft="8dp" android:background="?android:attr/selectableItemBackground" android:src="@drawable/search_ic_back_arrow"/> 

这个问题

点击时如何使button有一个圆形的涟漪效应? 我是否需要创build一个新的drawable,还是有内置的方法?

如果您使用AppCompat主题,则可以将视图的背景设置为:

 android:background="?selectableItemBackgroundBorderless" 

这会在21及以上增加圆形波纹,在21以下增加正方形背景。

创build并设置一个可绘制的波纹作为背景。 像这样的东西。

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/grey_15"> <item android:id="@android:id/mask"> <shape android:shape="oval"> <solid android:color="?android:colorPrimary"/> </shape> <color android:color="@color/white"/> </item> </ripple> 

你可以在xml中使用android:radius属性创build可绘制的圆形波纹。

例:

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="your_color" android:radius="your_radius" /> 

注意,你的your_radius应该小于你的视图的宽度和高度。 例如:如果您的视图大小为60dp x 60dp your_radius应该接近30dp (宽度/ 2或高度/ 2)。

在Android 5.0及更高版本上工作。