触摸布局时,如何在简单的线性/相对布局中产生波纹效果?

我尝试将布局的背景设置为类似以下内容:

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

在这种情况下,您不需要自定义可绘制对象。

但是,如果您的布局具有黑色/深色背景,则必须创建自己的波纹可绘制对象,如下所示:
<?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

10-05 22:57
查看更多