gpt4 book ai didi

android - 自定义边框布局包含半个圆

转载 作者:行者123 更新时间:2023-12-04 09:29:25 25 4
gpt4 key购买 nike

我需要创建带有两个布局标题和描述的 xml。在标题布局中,我需要添加边框,在左下角和右下角各有一半的圆圈,在描述布局中,边框在左上角和右上角各有一半的圆圈。这是我的设计

enter image description here

我可以通过在矩形半径边界线上创建两个半圆来做到这一点,但我不想使用它。我如何使用其他解决方案来做到这一点?请给我关键的工作或解决方案!非常感谢!

最佳答案

您可以使用 ShapeAppearanceModel定义自定义 CornerTreatment 以应用于组件。像这样的东西:

    val radius = resources.getDimension(R.dimen.default_corner_radius)
val title_layout = findViewById<LinearLayout>(R.id.title_layout)

val titleShapeModel = ShapeAppearanceModel().toBuilder()
.setTopLeftCorner(CornerFamily.ROUNDED, radius)
.setTopRightCorner(CornerFamily.ROUNDED, radius)
.setBottomLeftCorner(ConcaveRoundedCornerTreatment()).setBottomLeftCornerSize(radius)
.setBottomRightCorner(ConcaveRoundedCornerTreatment()).setBottomRightCornerSize(radius)
.build()
val titleBackground = MaterialShapeDrawable(titleShapeModel)
titleBackground.setStroke(1f, ContextCompat.getColor(this, R.color.colorPrimaryDark))

ViewCompat.setBackground(title_layout, titleBackground)

ConcaveRoundedCornerTreatment 是:

class ConcaveRoundedCornerTreatment : CornerTreatment() {

override fun getCornerPath(
shapePath: ShapePath,
angle: Float,
interpolation: Float,
radius: Float
) {
val interpolatedRadius = radius * interpolation
shapePath.reset(0f, interpolatedRadius, ANGLE_LEFT, ANGLE_LEFT - angle)
shapePath.addArc(
-interpolatedRadius,
-interpolatedRadius,
interpolatedRadius,
interpolatedRadius,
ANGLE_BOTTOM,
-angle
)
}

companion object {
const val ANGLE_LEFT = 180f
const val ANGLE_BOTTOM = 90f
}
}

对描述布局做同样的事情:

enter image description here

如果您正在使用像 CardView 这样的 View ,它有一个内置的 shapeAppearanceModel:

cardView.shapeAppearanceModel = cardView.shapeAppearanceModel.toBuilder()
.setTopRightCorner(concaveRoundedCornerTreatment).
.........
.build()

关于android - 自定义边框布局包含半个圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62906494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com