如何在简单的布局中创造涟漪效果

我怎样才能有一个简单的线性/相对布局涟漪效应时,接触的布局?

我尝试将布局的背景设置为:

<?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>
110744 次浏览

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

事实证明,这是按预期工作的。标准的 Materials 主题 ColorControlHighlight 值为 #40ffffff。所以在白色背景下,这个不会显示出来。将高亮颜色更改为其他颜色,或者更改对象的背景颜色。

谢谢大家(特别是阿兰为我指明了正确的方向)。

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

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

在这种情况下,您不需要定制的绘图。

然而,如果你的布局是黑色/暗色背景,你必须创建你自己的波纹绘制,如下图所示:

<?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>

然后将这个波纹设置为 背景属性。

你可以在 AOSP: 在这里中看到许多这类涟漪的例子

我添加这除了 伊戈尔 · 加纳波斯基的答案,以防任何人想有一个不同的颜色布局,也有涟漪效应。你只需要在这样的绘图中创建一个涟漪效应:

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>

然后给它作为你的布局的背景或任何按钮作为 伊戈尔 · 加纳波斯基在他的回答中提到。

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

把这个放进你的布局里:

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

注意: API 文档中有一个 bug。它只能在 空气污染指数 > = 23上工作

对于 所有空气污染指数 水平使用此 解决方案

您必须在任何小部件(TextView/Button)中更改以下代码片段,并且您可以实现 涟漪效应:

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

你可以走了。

只需添加与 android:background="?selectableItemBackground"默认涟漪效应

比如:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="?selectableItemBackground"
android:clickable="true"
>


...


</LinearLayout>

我尝试了所有这些答案,没有一个对我有用,所以,我解决了创建以下风格:

<style name="Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless">
<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>
<item name="android:layout_marginLeft">-6dp</item>
<item name="android:layout_marginRight">-6dp</item>
<item name="android:paddingTop">0dp</item>
<item name="android:paddingBottom">0dp</item>
<item name="android:paddingLeft">6dp</item>
<item name="android:paddingRight">6dp</item>
</style>

然后,我应用我的线性布局:

<LinearLayout
android:id="@+id/ll_my_ripple"
style="@style/Button.Borderless">
</LinearLayout>
<?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="#cfd8dc"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#d1c4e9" />
</shape>
</item>
</ripple>

使用此 在 Drawable 文件夹中的 ripple.xml,然后将其分配为 View 的

机器人:

Android: clickable = “ true”

这是一个例子,点击一个样本布局涟漪效应:

 <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="vertical">

要产生圆形效果,请使用以下代码:

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