如何填充涟漪效果

时间:2015-11-26 08:07:56

标签: android

以前,我使用StateDrawable来实现带阴影效果的自定义卡片视图 - https://stackoverflow.com/a/33829309/72437。这是由于CardView的限制,因为cardBackgroundColor无法接受选择器

现在,我想添加涟漪效果。我使用以下XML。

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

然而,这有副作用,绿色波纹延伸直到它接触阴影区域。

我想避免触摸阴影区域的绿色波纹。我尝试添加填充信息。

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#00ff00">
    <item>
        <shape android:shape="rectangle">
            <padding android:top="10dp" android:right="10dp" android:bottom="10dp" android:left="10dp" />
        </shape>
    </item>

    <item android:drawable="@drawable/statelist_item_background"/>
</ripple>

enter image description here

然而,它没有什么不同。在ripple标记内添加填充信息没有任何区别。

我可以知道如何填充涟漪效果?

2 个答案:

答案 0 :(得分:0)

您可以使用inset标记来定义所需的填充。有一个inset属性可以定义全局填充,也可以为每个方向定义4个属性。

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="10dp">
    <ripple
        android:color="#00ff00">
        <item android:drawable="@drawable/statelist_item_background"/>
    </ripple>
</inset>

答案 1 :(得分:-3)

您应该将其添加到CarView:

<CardView
    ...
    style="@style/MyCardViewStyle"
    android:foreground="?attr/selectableItemBackground">
</CardView>

然后,以你的风格添加:

<style name="MyCardViewStyle">
    <item name="colorControlHighlight">@color/my_awesome_color</item>
</style>

它会为你提供你想要的涟漪效果的绝佳颜色,而不必自己创建你的涟漪,并且会自动检测到界限,所以你不需要找到它是否可能为波纹添加填充。