如何在ripple drawable中设置state_selected

Soh*_*aib 56 android rippledrawable android-5.0-lollipop

如何android:state_selectedRippleDrawable中指定

我有跟随xml的ripple drawable但我设置时没有显示背景颜色 myView.setSelected(true);

<?xml version="1.0" encoding="utf-8"?>
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#DDDDDD"
    >

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


    <item android:state_selected="true">
        <shape>
            <solid
                android:color="#EEEEEE" />
        </shape>
    </item>


    <item>
        <color android:color="#FFFFFF" />
    </item>

</ripple>
Run Code Online (Sandbox Code Playgroud)

Soh*_*aib 93

找到答案,以防其他人遇到同样的问题

<?xml version="1.0" encoding="utf-8"?>
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#DDDDDD"
    >


    <item>
        <selector>
            <item android:state_selected="true">
                <color android:color="#EEEEEE" />
            </item>

            <item android:state_activated="true">
                <color android:color="#EEEEEE" />
            </item>

            <item>
                <color android:color="#FFFFFF" />
            </item>
        </selector>
    </item>


</ripple>
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,如果您使用透明颜色作为选择器正常状态,则应使用遮罩,否则将不会绘制纹波. (7认同)

tir*_*r38 14

要添加到@Sohaib的答案:

@Alanv是对的,OP不需要面具.但是,如果你的一个选择器状态是透明的,你需要一个掩码,它会在这里:

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

    <!-- mask here... -->
    <item android:id="@android:id/mask">
        <color android:color="@color/black"/> <!-- any color will do -->
    </item>

    <item>
        <selector>
            <!-- ... NOT here. -->
            <item android:state_selected="true">
                <color android:color="@color/blue"/>
            </item>

            <item android:state_activated="true">
                <color android:color="@color/red"/>
            </item>

            <item>
                <color android:color="@color/transparent"/>
            </item>
        </selector>
    </item>
</ripple>
Run Code Online (Sandbox Code Playgroud)

我最初在我的选择器里面有一个面具:boom:


Mea*_*man 7

将上述答案与其他答案结合起来:

Ripple,colorPrimary或​​colorAccent的颜色应该是多少?(材料设计)

产生良好的涟漪效果,当项目处于选定状态时也适用.

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
<!-- Ripple mask - applied to all selector states -->
<item android:id="@android:id/mask">
    <color android:color="#42ffffff" />
</item>
<!-- Selected state of item -->
<item>
    <selector>
        <item android:state_selected="true">
            <color android:color="?attr/colorAccent" />
        </item>
    </selector>
</item>
</ripple>
Run Code Online (Sandbox Code Playgroud)

这在你的drawable-v21文件夹中,对于其他平台,你可以创建一个使用强调颜色的选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/accent" android:state_selected="true"/>
    <item android:drawable="@color/accent" android:state_pressed="true"/>
</selector>
Run Code Online (Sandbox Code Playgroud)