如何在简单的布局创build涟漪效应

触摸布局时,如何在简单线性/相对布局中产生连锁效应?

我已经尝试设置布局的背景如下所示:

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight" > <item android:drawable="@android:color/white"/> </ripple> 

不过,我只看到纯白色的背景,触摸布局时没有涟漪效应。 我究竟做错了什么?

编辑:

作为参考,这里是我的布局xml文件:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="250dp" android:layout_height="250dp" android:background="@drawable/test" android:clickable="true"> </RelativeLayout> 

在布局上设置这些属性(如果您的布局具有默认的白色/浅色背景):

  android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground" 

在这种情况下,您不需要自定义drawable。

然而,如果你的布局有一个黑/黑的背景,你必须创build自己的波纹像这样绘制:

 <?xml version="1.0" encoding="utf-8"?> <!-- An white rectangle ripple. --> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/white"> <item android:id="@android:id/mask" android:gravity="center"> <shape android:shape="rectangle"> <solid android:color="@android:color/white"/> </shape> </item> </ripple> 

然后设置这个波纹作为你的android:background属性绘制。

您可以在AOSP中看到许多这类涟漪的示例: http : //androidxref.com/8.0.0_r4/search? q=ripple&defs=&refs=& path=& hist=&project=art&project=bionic&project=bootable&project=build&project=cts&project=dalvik& project =开发商及项目=开发和项目=设备及项目=文档和项目=外部及项目=框架及项目=硬件和项目=内核和项目= libcore及项目= libnativehelper及项目=包及项目= PDK及项目= platform_testing及项目= prebuilts及项目= SDK开发及项目=系统及项目=testing及项目=工具链及项目=工具

除了伊戈尔·加纳波尔斯基 ( Igor Ganapolsky )的回答之外,我还想补充一下,如果任何人想要有不同颜色的布局,并且还有涟漪效应。 你只需在像这样的drawable中创build一个涟漪效应:

ripple.xml

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="@color/rippleColor" tools:targetApi="lollipop"> <!-- ripple effect color --> <item android:id="@android:id/background"> <shape android:shape="rectangle"> <solid android:color="@color/backgroundColor" /> <!-- background color --> </shape> </item> </ripple> 

然后把它作为你的布局的背景或任何button,如Igor Ganapolsky在他的答案中提到的。

 android:clickable="true" android:background="@drawable/ripple" 

事实certificate,这是按预期工作。 标准的Material主题colorControlHighlight值是#40ffffff 。 所以在白色背景下,这不会显示出来。 将突出显示颜色更改为别的方法,和/或更改对象的背景颜色。

感谢所有人(特别是Alanv指出我在正确的方向)。

在您的布局上设置android:clickable="true"

你必须修改下面的代码片段( TextView / Button ),你可以实现Ripple效果

 android:clickable="true" android:foreground="?attr/selectableItemBackground" 

你很好走。

把它放到你的布局中:

 android:clickable="true" android:background="?attr/selectableItemBackground" 

注意:API文档中存在一个错误。 它只能在API> = 23时使用

对于所有API 级别使用此解决scheme