android - 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>
解决方案
推荐阅读
- javascript - Photoshop 2020:“错误 1302:没有这样的元素”
- c# - 当用户在 vsto 插件中的多个 Outlook 窗口之间切换时,了解哪个 Outlook 窗口获得焦点的事件
- javascript - 剪辑路径动画(CSS / JS)的mouseenter问题
- c - 来自 RFC4475 的示例是否可用作 C++ 源字符串?
- entity-framework-core - 无法登录 - 用户“用户名”登录失败
- reactjs - 如何将 Autodesk Forge 扩展与 React.js 一起使用?
- java - 如何找到具有所有不同字符的字符串的排列?
- html - 如果另一个重叠,则使一个 div 可滚动直到结束(基本上改变 div 的高度)
- vue.js - 在 VueJS 中调整画布大小
- windows - 两个 SSL 证书