如何在简单的布局创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