经过大量的研究和尝试,我决定向你寻求帮助。
我有2个可绘制对象,我想合并成一个。
上面的那个应该限制在后面那个的形状上。
这是我的想法,但由于某些原因,上面那个透明的部分并不透明。
不要介意背景绘制的奇怪偏移量,我稍后会修正这个问题。
稍后我希望能够通过一个图像,并有它填补形状除了中风。但也许我可以添加中风后?
下面是代码:
@Composable
fun Avatar(backgroundDrawable: Int, avatarSize: Int = 80) {
val imageBitmapDst =
getBitmapFromImage(LocalContext.current, backgroundDrawable)
.asImageBitmap()
val imageBitmapSrc =
getBitmapFromImage(LocalContext.current, R.drawable.default_avatar)
.asImageBitmap()
Canvas(modifier = Modifier.size(avatarSize.dp)) {
val dimension = size.height.coerceAtMost(size.width) / 2f
val xPos = (size.width - dimension) / 2f
val yPos = (size.height - dimension) / 2f
drawImage(
image = imageBitmapDst,
)
drawImage(
image = imageBitmapSrc,
dstOffset = IntOffset(xPos.toInt(), yPos.toInt()),
dstSize = IntSize(dimension.toInt(), dimension.toInt()),
blendMode = BlendMode.SrcIn
)
}
}
我觉得我快到了,但我错过了一些东西。
提前感谢您的帮助!
1条答案
按热度按时间2hh7jdfx1#
您需要将Canvas的alpha设置为小于1f,或者使用一个层来应用Blend或Porter Duff模式。
你可以参考这些问题和答案
https://stackoverflow.com/a/69790654/5457853
How to clip or cut a Composable?
https://stackoverflow.com/a/73996333/5457853