Android:以编程方式为 RippleDrawable 设置圆角半径

Android: Set corner radius for RippleDrawable programmatically

我正在尝试创建分段按钮控件,并且我为每个分段使用了一个可绘制对象。

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="@color/search_filters_selected" />
        </shape>
    </item>
    <item>
        <shape
            android:padding="10dp"
            android:shape="rectangle">
            <solid android:color="@color/search_filters_unselected" />
            <stroke
                android:width="1dp"
                android:color="@color/search_filters_selected" />
        </shape>
    </item>
</ripple>

然后根据是第一个,最后一个还是中间,我设置圆角半径为左角圆角,右角圆角或none,使用setCornerRadii.

问题是我试图在视图中显示涟漪效应,但我无法做到这一点,因此涟漪效应以圆角为界,它总是绘制到原始矩形, like this

我试过为 RippleDrawable 的遮罩设置相同的角半径,或者使用 <item android:drawable="?android:selectableItemBackground" /> 在图层列表中而不是 <ripple>,但结果是相同的。有谁知道如何使涟漪达到新的界限?

解决方案,如果对任何人有用,就是使用不带遮罩的波纹,同时设置角半径(任何一个,稍后更新)

所以我用了

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#625505" />
            <corners android:radius="1dp"/>
        </shape>
    </item>
    <item>
        <shape
            android:padding="10dp"
            android:shape="rectangle">
            <solid android:color="@color/search_filters_selected" />
            <stroke
                android:width="1dp"
                android:color="@color/search_filters_selected" />
        </shape>
    </item>
</ripple>

终于开始工作了