首页 > 解决方案 > MDC Button MaterialShapeDrawable 奇怪的阴影并且没有波纹

问题描述

与本期的附件类似,我的按钮角阴影看起来很狡猾。但是通过自定义边缘和圆角处理,按钮似乎失去了高度,并且没有波纹/点击效果。知道我做错了什么吗?

在此处输入图像描述

材质版本为 1.1.0-alpha07

class CurvedEdgeTreatment (private val size: Float) : EdgeTreatment(), Cloneable {

    public override fun clone(): EdgeTreatment {
        return super<EdgeTreatment>.clone()
    }

    override fun getEdgePath(length: Float, center: Float, interpolation: Float, shapePath: ShapePath) {
        shapePath.quadToPoint(center, -size * interpolation, length, 0f)
    }
}

class ButtonActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_button)

        val shapeAppearanceModel = ShapeAppearanceModel().apply {
            setAllCorners(RoundedCornerTreatment(12.dpToPx(resources.displayMetrics).toFloat()))
            setAllEdges(CurvedEdgeTreatment(3.dpToPx(resources.displayMetrics).toFloat()))
        }

        val backgroundDrawable = MaterialShapeDrawable(shapeAppearanceModel).apply {
            setTint(ContextCompat.getColor(this@ButtonActivity, R.color.color_secondary))
            shadowCompatibilityMode = SHADOW_COMPAT_MODE_ALWAYS
            elevation = 12f
            setUseTintColorForShadow(true)
            paintStyle = Paint.Style.FILL
        }

        raisedContainedButton.background = backgroundDrawable
    }

    fun Int.dpToPx(displayMetrics: DisplayMetrics): Int = (this * displayMetrics.density).toInt()

    fun Int.pxToDp(displayMetrics: DisplayMetrics): Int = (this / displayMetrics.density).toInt()
}



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">

        <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center"
                android:padding="16dp"
                android:clipChildren="false"
                android:clipToPadding="false">

            <com.google.android.material.button.MaterialButton
                    android:id="@+id/raisedContainedButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="I am a button la la la la la la"/>

        </FrameLayout>

</LinearLayout>

标签: androidandroid-buttonmdc-components

解决方案


推荐阅读