在ImageButton之外实现纹波效果

我试图实现ImageButton的涟漪效应。我在背景中设置了波纹,在src中设置了可绘制的图像。

android:background="@drawable/myripplexml" android:src="@drawable/myimagepath" 

它给button布局里面的漂亮的涟漪效果。 但是我希望Ripple效果也可以扩展到button布局以外。另一种方法是使用:

  android:background="?android:attr/selectableItemBackgroundBorderless" 

但是它使用默认的颜色和样式。 我如何定制颜色,形状和尺寸?

Solutions Collecting From Web of "在ImageButton之外实现纹波效果"

我碰到这个,我的问题是'selectableItemBackgroundBorderless'创build一个矩形,而我的button是圆形的。 我不知道这是否回答了原来的问题,但这里是我发现的:在drawable-v21中设置背景

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight"> <item android:id="@android:id/mask"> <shape android:shape="oval"> <solid android:color="?android:colorAccent" /> </shape> </item> </ripple> 

和@null在较低的api水平(假设你使用的是实际的图像buttonsrc的select器)。 在button的填充中最明显的波纹。 如果根本没有遮蔽层波纹是没有束缚的,并且会占据整个屏幕。 如果不是一个圆圈,你可以使用任何你想要的形状。

如果你像我一样懒惰,那就利用默认的涟漪,忘记向后兼容。 基本上有两种types的背景涟漪可以添加到你的意见:

  ?android:selectableItemBackground // Ripple within view ?android:selectableItemBackgroundBorderless //Ripple outside view 

不幸的是,这些涟漪总是灰色的。 要根据您的主题调整这些,请转到您的父母主题并更改colorControlHighlight。

在您的应用程序的主题:

 <item name="colorControlHighlight">#1bff3a</item> 

该值将改变默认波纹的颜色。

注意:在21以下的设备上,波纹将变成您设置的颜色相同的正式select器。

就像他在评论中提到的@alan。 如果您创build没有蒙版和子项目的涟漪项目并将其添加为视图背景,则涟漪会绘制在第一个可用父项的顶部,并可能扩展视图边界。 这在文档中提到

 <!-- An unbounded red ripple. --/> <ripple android:color="#ffff0000" />