如何创建一个形状并在表面的特定位置更改其 alpha?
How can I create a shape and change its alpha in a specific place on a surface?
假设我有一个表面,我的背景颜色是红色;
Surface(modifier = Modifier.fillMaxSize().alpha(0.1f)){}
我如何在像孔一样的表面上创建一个形状(例如:矩形),以便我可以看到背景颜色不是 alpha 0.1f,而是来自这个矩形形状内部的 alpha 1.0f?
我想在我的应用程序中使用教程屏幕,除了我的示例之外,我对任何想法都持开放态度。
满足你需求的各种素材,其实都在这个项目中。您可以选择使用和检查代码。
我实现了一个示例,可以在您的实现中为您提供 kick-off:
@Composable
fun CanvasWithHole(
holeXPosition: Float,
holeYPosition: Float,
holeRadius: Float
) {
androidx.compose.foundation.Canvas(
modifier = Modifier.fillMaxSize(),
onDraw = {
drawIntoCanvas { canvas ->
val w = drawContext.size.width
val h = drawContext.size.height
drawImageWithHole(
canvas.nativeCanvas,
w, h, holeXPosition, holeYPosition, holeRadius,
)
}
}
)
}
fun drawImageWithHole(
canvas: Canvas,
w: Float,
h: Float,
holeXPosition: Float,
holeYPosition: Float,
holeRadius: Float
) {
val bitmap = Bitmap.createBitmap(
w.toInt(), h.toInt(), Bitmap.Config.ARGB_8888
).apply {
eraseColor(Color.TRANSPARENT)
}
val canvasBitmap = Canvas(bitmap)
val eraser = Paint().apply {
color = Color.TRANSPARENT
xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR)
}
canvasBitmap.drawColor(Color.parseColor("#cc328fa8"))
canvasBitmap.drawCircle(holeXPosition, holeYPosition, holeRadius, eraser)
canvas.drawBitmap(bitmap, 0f, 0f, null)
}
以下是您的使用方法:
@Composable
fun MyScreen() {
Box {
ContentScreen()
CanvasWithHole(
100f,
100f,
400f,
)
}
}
结果如下:
假设我有一个表面,我的背景颜色是红色;
Surface(modifier = Modifier.fillMaxSize().alpha(0.1f)){}
我如何在像孔一样的表面上创建一个形状(例如:矩形),以便我可以看到背景颜色不是 alpha 0.1f,而是来自这个矩形形状内部的 alpha 1.0f?
我想在我的应用程序中使用教程屏幕,除了我的示例之外,我对任何想法都持开放态度。
满足你需求的各种素材,其实都在这个项目中。您可以选择使用和检查代码。
我实现了一个示例,可以在您的实现中为您提供 kick-off:
@Composable
fun CanvasWithHole(
holeXPosition: Float,
holeYPosition: Float,
holeRadius: Float
) {
androidx.compose.foundation.Canvas(
modifier = Modifier.fillMaxSize(),
onDraw = {
drawIntoCanvas { canvas ->
val w = drawContext.size.width
val h = drawContext.size.height
drawImageWithHole(
canvas.nativeCanvas,
w, h, holeXPosition, holeYPosition, holeRadius,
)
}
}
)
}
fun drawImageWithHole(
canvas: Canvas,
w: Float,
h: Float,
holeXPosition: Float,
holeYPosition: Float,
holeRadius: Float
) {
val bitmap = Bitmap.createBitmap(
w.toInt(), h.toInt(), Bitmap.Config.ARGB_8888
).apply {
eraseColor(Color.TRANSPARENT)
}
val canvasBitmap = Canvas(bitmap)
val eraser = Paint().apply {
color = Color.TRANSPARENT
xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR)
}
canvasBitmap.drawColor(Color.parseColor("#cc328fa8"))
canvasBitmap.drawCircle(holeXPosition, holeYPosition, holeRadius, eraser)
canvas.drawBitmap(bitmap, 0f, 0f, null)
}
以下是您的使用方法:
@Composable
fun MyScreen() {
Box {
ContentScreen()
CanvasWithHole(
100f,
100f,
400f,
)
}
}
结果如下: