切换按钮具有无边界按钮样式-如何使背景处于选中状态?

Zac*_*ach 5 android button rippledrawable android-5.0-lollipop

我正在尝试让标准的Android ToggleButton呈现某种自定义样式:在未选中状态下,不显示边框/背景填充,在选中状态下,背景填充显示,当按下(选中或未选中)时会产生波纹效果显示为从一种状态过渡到另一种状态。

我已经做好了一切,大部分情况下都使用它作为ToggleButton的背景:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/ripple" android:state_pressed="true"/>
    <item android:drawable="@drawable/checked_bg" android:state_checked="true"/>
    <item android:drawable="@android:color/transparent"/>

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

波纹:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight" >

    <item
        android:id="@android:id/mask">
        <color
            android:color="@android:color/white" />
    </item>

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

checked_bg:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid
        android:color="?android:attr/colorControlHighlight" />

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

但是,当我从选中状态转到未选中状态时,涟漪将实心填充应用于与选中按钮状态填充颜色不匹配的按钮,因此它似乎立即从一种颜色“跳转”到另一种颜色。我相信这是因为我在检查状态背景填充和波纹颜色上都使用了colorControlHighlight,因此波纹最终以该颜色开始,并以另一种稍微浅一点的颜色开始...

但是,我不能简单地将选中状态的背景填充更改为这种较浅的颜色,因为这会使我检查/打开按钮时看起来很奇怪-它会以较浅的颜色开始,与选中的背景填充相匹配,然后变成较深的颜色,然后立即再次跳至较浅的颜色。

有没有一种干净的方法来解决这个问题?还是我一端卡住了颜色变化?

或者,我可以使用两种不同的纹波,一种用于按下= true和checked = false,另一种用于按下= true和checked = true的情况,对吗?