14

我对如何正确使用 Ripple Drawable 有点迷茫。

假设我有这个drawable:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:state_pressed="false" android:state_focused="true" android:drawable="@color/accent_color_light" />
     <item android:state_pressed="true" android:drawable="@color/accent_color_light" />
     <item android:drawable="@android:color/white" />
</selector>

所以它是一个纯白色的背景,当它被聚焦或按下时会变成浅蓝色。

我怎样才能获得相同的颜色但具有涟漪效果?我想我需要使用遮罩来防止它超出视图范围?

4

2 回答 2

30

忘了回答我自己的问题。

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
   android:exitFadeDuration="@android:integer/config_shortAnimTime"
   android:color="@color/my_color" >

   <item android:id="@android:id/mask">
       <shape android:shape="rectangle" >
           <solid android:color="@android:color/holo_green_light" />
       </shape>
    </item>

</ripple>

不显示 id 为“mask”的项目中的颜色。它用于说明波纹效果的形状和范围。没有它,它可能会超出视图的范围。

于 2014-12-17T15:57:00.610 回答
25

RippleDrawable已经是StateListDrawable(ie selector) - 所以你可以使用可绘制的波纹作为背景(具有默认状态) - 像这样:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/accent_color_light">
    <item android:id="@android:id/mask">
        <color android:color="@android:color/white" />
    </item>
    <item android:drawable="@android:color/white" />
</ripple>

遮罩部分限制了波纹(实际上,上面的片段,减去颜色和android:drawable设置非按下背景的最后一个)是棒棒糖中使用的默认列表选择器。

于 2014-12-07T08:29:08.007 回答