这是问答式的问题,因为我正在寻找使用 Jetpack Canvas 的绘图示例,但在 stackoverflow 上有问题,这个或另一个,我发现可以使用pointerInteropFilter像 View 那样的绘图onTouchEvent MotionEvent,根据文档,这是不建议的
一个特殊的 PointerInputModifier,提供对最初调度到 Compose 的底层 MotionEvent 的访问。优先选择pointerInput ,并且仅将其用于与使用MotionEvents 的现有代码的互操作。
虽然此修饰符的主要目的是允许任意代码访问分派给 Compose 的原始 MotionEvent,但为了完整性,提供了类似物以允许任意代码与系统交互,就好像它是 Android 视图一样。
android android-jetpack-compose android-jetpack-compose-canvas
我正在尝试在 Jetpack Compose 中的圆圈内绘制文本。
我画了一个圆,中心是画布的中心。
现在我想精确地在圆的中心绘制文本。
drawTextJetpack compose中的函数具有canvas参数topLeft,该参数需要Offset包含文本的矩形的左上角。我知道我不能通过圆心作为偏移量topLeft,如果我这样做,结果将如下所示,这不是我想要的。
我希望文本恰好绘制在圆的中心。
这是代码:
Box(
modifier = Modifier
.fillMaxSize()
.background(Color.Green.copy(alpha = 0.2f))
.padding(36.dp),
contentAlignment = Alignment.Center
) {
val textMeasurer = rememberTextMeasurer()
val textToDraw = "A"
Canvas(modifier = Modifier.fillMaxSize()) {
drawCircle(
center = Offset(
x = center.x,
y = center.y
),
radius = 350f,
color = Color.Blue,
style = Stroke(
width = 8f
)
)
drawText(
textMeasurer = textMeasurer,
text = textToDraw,
style = TextStyle( …Run Code Online (Sandbox Code Playgroud) android drawtext android-canvas android-jetpack-compose android-jetpack-compose-canvas
我正在尝试使用drawCircleon 来制作圆形绘图的动画Canvas,如下所示:
drawCircle(
color = Color.Black,
radius = 200f * animatableCircle.value,
center = Offset(size.width / 4, size.height / 4),
style = Stroke(2f)
)
Run Code Online (Sandbox Code Playgroud)
它看起来不像正在绘制圆,而是圆开始从中心缩放。是否可以实现如图所示的沿半径画圆的效果CircularProgressIndicator?

android kotlin android-jetpack-compose android-jetpack-compose-canvas
我需要实现一个圆环图,其中切片中心的每个扇区都有图例。我使用compose,图表本身没有问题,但我不明白如何在每个扇区中间绘制文本
该图显示了如何显示文本的示例。
还提供了我绘制圆环图的代码
Box(modifier = modifier
.size(middleLineRadius * 2)
.drawBehind {
var startAngle = 0f
// draw each arc for each data entry in chart
data.forEach { chartEntry ->
drawArc(
color = chartEntry.color,
startAngle = startAngle,
sweepAngle = sweepAngle,
useCenter = false,
style = Stroke(width = chartBarWidth.toPx(), cap = StrokeCap.Butt)
)
startAngle += sweepAngle // increase sweep angle
}
}
)
Run Code Online (Sandbox Code Playgroud) geometry android android-canvas android-jetpack-compose android-jetpack-compose-canvas
如何为撰写中的框制作彩虹边框动画,我看到的所有示例都是针对圆形的,并且它们使用旋转和绘制,但我真正需要的是为撰写中的框制作相同的动画。
\n谢谢
\n使用旋转但它没有 \xc2\xb4t 工作
\nandroid-animation kotlin android-jetpack-compose android-jetpack-compose-canvas android-jetpack-compose-animation
我需要绘制一个圆角正方形,类似于drawRoundRect,但只有轮廓。
像这样的东西。
该图像是手工绘制的,正如我所说,我需要它看起来像drawRoundRect但没有轮廓(我不希望它看起来是手绘的)
如果你看到它,这条线有这样的渐变:红色 -> 白色 -> 红色
我需要同样的渐变。如果有人有想法或解决方案,我将不胜感激。
android canvas android-canvas android-jetpack-compose android-jetpack-compose-canvas
我如何使用 JetpackCompose 在 android 中绘制矩形进度条(如下图所示)作为 CircleProgress 指示器 https://drive.google.com/file/d/1SXZcBp7uAesl-i6gHqFNXNpnc54Z6vdI/view?usp=share_link
CircularProgressIndicator(strokeWidth=10.dp,
progress = 1.0f,
color = Red,
modifier = Modifier.height(200.dp).width(200.dp).align(Alignment.Center))
Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose android-jetpack-compose-canvas android-jetpack-compose-animation
我正在使用 Jetpack Compose 来实现绘制“逐渐增长的线”的要求,即从指定的起点和点开始并逐渐“增长”直到到达指定的终点的线。我之前用自定义视图实现了这个,效果很好。我的逻辑要求根据某些条件一次又一次地重新调用“onDraw()”。为此,我在使用自定义视图时使用了“invalidate()”。但现在我正在使用 Jetpack Compose,无法找到重新组合“Canvas”的方法。
这是我的 Jetpack 为“逐渐增长的线”编写的代码:
@Composable
fun SplashUI() {
var test = remember { mutableStateOf(0) }
Canvas(modifier = Modifier.fillMaxSize()) {
// starting point
x1 = 0.0;
y1 = size.height / 2.0;
// ending point
x2 = size.width.toDouble()
y2 = size.height / 2.0;
divideLineIntoEqualParts();
if (test.value < listOfPoints.size) {
drawLine(
Color.Black,
Offset(
listOfPoints.get(0)?.x!!,
listOfPoints.get(0)?.y!!
),
Offset(
listOfPoints.get(inte)?.x!!,
listOfPoints.get(inte)?.y!!
),
strokeWidth = 5f
);
}
test.value = test.value + 1 //This doesn't trigger recomposition of canvas
//Recomposition of …Run Code Online (Sandbox Code Playgroud) android android-canvas android-jetpack-compose android-jetpack-compose-canvas
我对在 Compose 中制作此视图有疑问,但我不知道如何实现它。

我当前的代码如下所示:
Box(
modifier = Modifier
.fillMaxSize()
.height(300.dp)
) {
Canvas(modifier = Modifier.matchParentSize()) {
drawRoundRect(
color = Color.Yellow,
cornerRadius = CornerRadius(16.dp.toPx(), 16.dp.toPx())
)
drawRoundRect(
color = Color.White,
topLeft = Offset(
x = size.width / 5,
y = size.height - 60.dp.toPx()
),
size = Size((size.width / 5) * 3, 50.dp.toPx() * 2),
cornerRadius = CornerRadius(24.dp.toPx(), 24.dp.toPx()),
)
}
Box(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
) {
Text(
text = "Test",
modifier = Modifier.align(Alignment.BottomCenter)
)
}
}
Run Code Online (Sandbox Code Playgroud)
结果如下:

kotlin android-jetpack-compose android-jetpack-compose-canvas
android-jetpack-compose-canvas ×10
android ×8
kotlin ×4
android-jetpack-compose-animation ×2
canvas ×1
drawtext ×1
geometry ×1