作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现这一点:
所以我想我可以使用 MaterialShapeDrawable
应用该转换:
binding.card.background = MaterialShapeDrawable(
ShapeAppearanceModel.builder()
.setAllCornerSizes(5.dpToPx().toFloat())
.setTopEdge(object : TriangleEdgeTreatment(7.dpToPx().toFloat(), false){
override fun getEdgePath(length: Float, center: Float, interpolation: Float, shapePath: ShapePath) {
super.getEdgePath(length, 12.dpToPx().toFloat(), interpolation, shapePath)
}
})
.build()
).apply {
fillColor = resourcesProvider().colorStateListFromAttr(R.attr.colorSurface, R.style.App_CardView)
}
<com.google.android.material.card.MaterialCardView
style="@style/Widget.MaterialComponents.CardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="20dp"
android:clipChildren="false"
app:cardBackgroundColor="@android:color/transparent"
app:cardElevation="10dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="10dp"> //without this margin nothing is shown
app:cardElevation="10dp"
,我得到了一个时髦的结果(这是必需的):
最佳答案
由于您在 CardView
之外绘图,在父 View 中你应该使用类似的东西:
<LinearLayout
android:clipChildren="false"
android:clipToPadding="false"
android:padding="16dp"
..>
<com.google.android.material.card.MaterialCardView
app:cardElevation="2dp"
../>
ShapeAppearanceModel
但获取现有的
ShapeAppearanceModel
由 cardview 使用(在您的代码中,您将替换现有的
MaterialShapeDrawable
不仅应用更改
ShapeAppearanceModel
):
cardView.setShapeAppearanceModel(cardView.getShapeAppearanceModel()
.toBuilder()
.setTopEdge(new TriangleEdgeTreatment(size, false){
@Override public void getEdgePath(float length, float center, float interpolation,
@NonNull ShapePath shapePath) {
//...... your implementation
}
}
)
.build());
1.2.0-beta01
您也可以使用
OffsetEdgeTreatment
与
MarkerEdgeTreatment
.
MarkerEdgeTreatment markerEdgeTreatment = new MarkerEdgeTreatment(size);
OffsetEdgeTreatment offsetEdgeTreatment = new OffsetEdgeTreatment(markerEdgeTreatment,offset);
cardView.setShapeAppearanceModel(cardView.getShapeAppearanceModel()
.toBuilder()
.setTopEdge(offsetEdgeTreatment)
.build());
关于android - MaterialCardView 与 MaterialShapeDrawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62019643/
我想实现这一点: 所以我想我可以使用 MaterialShapeDrawable应用该转换: binding.card.background = MaterialShapeDrawable(
我有一个带圆角的 TextView。 这是我的代码: float radius = 10f; ShapeAppearanceModel shapeAppearanceModel = new Shape
我是一名优秀的程序员,十分优秀!