使按钮动画不超过可绘制背景

Make button animation not go over drawable background

Top button: Not pressed, bottom button pressed

如何使 "default" 按钮上的块动画单击 android 以适应设置的可绘制背景?可绘制背景为按钮提供了圆角。

编辑:ripple.xml 有效,但覆盖了按钮文本。

按钮:

        <Button
        android:id="@+id/about"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:textSize="20sp"
        android:text="test123"
        android:padding="5dip"
        android:textAllCaps="false"
        android:textColor="@color/settings"
        android:foreground="@drawable/ripple"
        />

可绘制setting_button

<?xml version="1.0" encoding="utf-8"?>
<!--  res/drawable/rounded_edittext.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
    <solid android:color="@color/colorWhite"/>
    <corners
        android:bottomRightRadius="15dp"
        android:bottomLeftRadius="15dp"
        android:topLeftRadius="15dp"
        android:topRightRadius="15dp"/>
</shape>
Ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="#000000" />
            <corners
                android:bottomRightRadius="15dp"
                android:bottomLeftRadius="15dp"
                android:topLeftRadius="15dp"
                android:topRightRadius="15dp"/>
        </shape>
    </item>
    <item android:drawable="@drawable/setting_button" />
</ripple>

解决办法就在于RippleDrawable的特殊mask层。您可以通过将 android:id 值设置为 @android:id/mask 来指定遮罩层。 https://proandroiddev.com/rippling-rounding-and-android-pies-d5db5f4c2fc1 http://michaelevans.org/blog/2015/05/07/android-ripples-with-rounded-corners/

  <Button
    android:id="@+id/about"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:background="@drawable/setting_button"
    android:foreground="@drawable/ripple"
    android:padding="5dip"
    android:text="test123"
    android:textAllCaps="false"
    android:textColor="@color/settings"
    android:textSize="20sp" />

并从波纹可绘制对象中删除 <item android:drawable="@drawable/setting_button" />

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight">
<item android:id="@android:id/mask">
    <shape android:shape="rectangle">
        <solid android:color="#000000" />
        <corners
            android:bottomLeftRadius="15dp"
            android:bottomRightRadius="15dp"
            android:topLeftRadius="15dp"
            android:topRightRadius="15dp" />
    </shape>
</item>