我有一个简单的Box
Composable,我想把它裁剪成一个自定义形状,但无论何时我尝试它,形状的大小仍然非常小。我尝试过使用Matrix()
在路径级别上缩放,但没有效果。下面是示例-
const val clockHand = "M0 80.52L2 86l2-5.48V2.74C4 1.83 3.6 0 2 0S0 1.83 0 2.74v77.78Z"
val clockHandShape = object : Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density
): Outline {
return Outline.Generic(PathParser.createPathFromPathData(clockHand).asComposePath())
}
}
Box(
modifier = Modifier
.background(Color.Green)
.clip(clockHandShape)
.width(30.dp)
.height(50.dp)
.background(Color(0xFFFF007A))
.layoutId("hourHand")
) {}
作为一个控件,你可以用一个预定义的形状来替换自定义的形状,比如RectangleShape
或CircleShape
等。
1条答案
按热度按时间3qpi33ja1#
剪切不会使大小修改器无效。形状是使用来自创建该可绘制对象的值的固有像素大小创建的。
您所需要做的就是使用getBounds()获取Path的固有大小。在使用matrix.postScale创建形状时,size和scale将变为可组合大小。