Jay*_*mar 1 android kotlin android-jetpack-compose jetpack-compose
谁能告诉我如何在 jetpack compose 中创建以下形状
先感谢您
CustomShape 的灵感来自https://juliensalvi.medium.com/custom-shape-with-jetpack-compose-1cb48a991d42
它是添加直线和圆弧路径的扩展。
对于转换,它只是 y 轴上的旋转https://developer.android.com/jetpack/compose/graphics/draw/modifiers
圆形边框和自定义背景形状以及在 y 轴上旋转的图形层。
class CustomCardShape(private val radius: Float) : Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density
): Outline {
return Outline.Generic(
path = drawCardShape(size, radius)
)
}
}
Run Code Online (Sandbox Code Playgroud)
带路径的形状
fun drawCardShape(size: Size, cornerRadius: Float): Path {
return Path().apply {
reset()
// Top left arc
arcTo(
rect = Rect(
left = 0f,
top = 0f,
right = cornerRadius,
bottom = cornerRadius
),
startAngleDegrees = 180.0f,
sweepAngleDegrees = 90.0f,
forceMoveTo = false
)
lineTo(x = size.width - cornerRadius, y = 0f)
// Top right arc
arcTo(
rect = Rect(
left = size.width - cornerRadius,
top = 0f,
right = size.width,
bottom = cornerRadius
),
startAngleDegrees = 270.0f,
sweepAngleDegrees = 90.0f,
forceMoveTo = false
)
lineTo(x = size.width, y = size.height - cornerRadius)
// Bottom right arc
arcTo(
rect = Rect(
left = size.width - cornerRadius,
top = size.height - cornerRadius,
right = size.width,
bottom = size.height
),
startAngleDegrees = 0.0f,
sweepAngleDegrees = 90.0f,
forceMoveTo = false
)
lineTo(x = cornerRadius, y = size.height)
// Bottom left arc
arcTo(
rect = Rect(
left = 0f,
top = size.height - cornerRadius,
right = cornerRadius,
bottom = size.height
),
startAngleDegrees = 90.0f,
sweepAngleDegrees = 90.0f,
forceMoveTo = false
)
lineTo(x = 0f, y = cornerRadius)
close()
}
}
Run Code Online (Sandbox Code Playgroud)
卡片可组合
Card(modifier = modifier
.height(300.dp)
.width(400.dp)
.graphicsLayer {
// pivot of where the rotation shud happen
this.transformOrigin = TransformOrigin(0f, 0f)
this.rotationY = 5f
}.shadow(elevation = 4.dp, shape = CustomCardShape(80f),
ambientColor = Color(0xff2f5e9b),
spotColor = Color(0xff2f5e9b)),
border = BorderStroke(5.dp,Color(0xff5d6474)),
backgroundColor = Color(0xff333d51),shape = CustomCardShape(80f)){
}
Run Code Online (Sandbox Code Playgroud)
结果
上面的内容可能与屏幕截图中的不完全一样,但是您可以使用值使其完全符合您的要求。
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |