有这样一个图标
它画得像这样:
@Composable
private fun IconWithCircleBackground(
@DrawableRes res: Int,
modifier: Modifier = Modifier,
radius: Dp = 16.dp,
strokeColor: Color = ColorTokens.grey_10,
strokeWidth: Dp = 1.dp,
backgroundColor: Color = Color.Black,
backgroundAlpha: Float = 0.7f
) {
Box(modifier = modifier.size(radius)) {
Canvas(modifier = Modifier.size(radius)) {
drawCircle(
color = backgroundColor.copy(alpha = backgroundAlpha),
radius = radius.toPx() - strokeWidth.toPx() / 2
)
drawCircle(
color = strokeColor,
radius = radius.toPx(),
style = Stroke(width = strokeWidth.toPx())
)
}
Image(
painter = painterResource(id = res),
contentDescription = stringResource(id = ...)
)
}
}
即Canvas
在其上第一层绘制一个以黑色(+alpha)填充的圆圈作为背景,第二层绘制一条白线作为边框并且图标位于中心。
您需要制作第一层(黑色背景),以使其模糊。问题——这里如何应用模糊?
根据 进行模糊
RenderScript
,半径设置模糊深度:更原始的选择是简单地将原始尺寸缩小
Bitmap
8-16 倍,然后“拉伸”它canvas
。最后我这样做了(剧透 - 模糊并没有帮助我做我想做的事,我想要的仍然是玻璃态的,但也许它对某些人有用)
想法是,有这样一个修改器
blur(radius = 10.dp)
,但它不能应用于drawCircle
,所以我创建一个位图,将其插入到Image
,然后通过修改器Image
应用它。blur