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

时间:2014-11-18 23:38:32

标签: android android-5.0-lollipop rippledrawable

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

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

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

10 个答案:

答案 0 :(得分:193)

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

          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>

然后将此波纹绘制为 android:background 属性。

您可以在AOSP中看到许多这类涟漪的例子:in here

答案 1 :(得分:49)

除了Igor Ganapolsky的答案之外,我还添加了这个,以防有人想要使用不同颜色的布局并且还有涟漪效果。你只需在这样的drawable中创建一个涟漪效果:

  

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>

然后将其作为您的布局背景或其答案中提到的Igor Ganapolsky按钮。

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

答案 2 :(得分:24)

您必须在任何小部件(<?xml version = "1.0" encoding = "UTF-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "WebApp_ID" version = "3.0"> <display-name>User Management</display-name> <servlet> <servlet-name>Jersey RESTful Application</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.tutorialspoint</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Jersey RESTful Application</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> / TextView)中更改以下代码段,然后才能实施涟漪效应

Button

你很高兴。

答案 3 :(得分:17)

事实证明这是按预期工作的。标准材质主题colorControlHighlight值为#40ffffff。所以在白色背景上,这不会出现。将高亮颜色更改为其他内容可以起作用,和/或更改对象的背景颜色。

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

答案 4 :(得分:9)

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

答案 5 :(得分:4)

<?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:background =“ @ drawable / ripple”

android:clickable =“ true”

答案 6 :(得分:2)

只需使用android:background="?selectableItemBackground"

添加默认涟漪效果即可

<强>像:

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

           ...

</LinearLayout>

答案 7 :(得分:0)

将它放入你的布局:

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

注意:API文档中存在错误。它仅适用于 API&gt; = 23

对于所有API 级别,请使用此Solution

答案 8 :(得分:0)

我尝试了所有这些答案,没有任何对我有用,所以,我解决了创建以下风格的问题:

select col1, col2, col3
from table1
group by col1, col2, col3
having max(col5) keep (dense_rank last order by col4_date) = 'Hi';

然后,我申请了我的线性布局:

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

答案 9 :(得分:0)

这是单击带有波纹效果的示例布局的示例:

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