标签: android-jetpack-compose-canvas

如何使用触摸事件在 Jetpack Compose Canvas 上绘图?

这是问答式的问题,因为我正在寻找使用 Jetpack Canvas 的绘图示例,但在 stackoverflow 上有问题,这个另一个,我发现可以使用pointerInteropFilter像 View 那样的绘图onTouchEvent MotionEvent,根据文档,这是不建议的

一个特殊的 PointerInputModifier,提供对最初调度到 Compose 的底层 MotionEvent 的访问。优先选择pointerInput ,并且仅将其用于与使用MotionEvents 的现有代码的互操作。

虽然此修饰符的主要目的是允许任意代码访问分派给 Compose 的原始 MotionEvent,但为了完整性,提供了类似物以允许任意代码与系统交互,就好像它是 Android 视图一样。

android android-jetpack-compose android-jetpack-compose-canvas

11
推荐指数
1
解决办法
5424
查看次数

如何在 Jetpack compose 中在另一个对象的中心绘制文本?

我正在尝试在 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

8
推荐指数
1
解决办法
3919
查看次数

在 Jetpack compose 中绘制动画圆圈

我正在尝试使用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

6
推荐指数
1
解决办法
4453
查看次数

在线段中心绘制饼图(圆环图)的图例

我需要实现一个圆环图,其中切片中心的每个扇区都有图例。我使用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

6
推荐指数
1
解决办法
881
查看次数

如何在compose中为盒子制作彩虹边框动画?

如何为撰写中的框制作彩虹边框动画,我看到的所有示例都是针对圆形的,并且它们使用旋转和绘制,但我真正需要的是为撰写中的框制作相同的动画。

\n

谢谢

\n

使用旋转但它没有 \xc2\xb4t 工作

\n

android-animation kotlin android-jetpack-compose android-jetpack-compose-canvas android-jetpack-compose-animation

6
推荐指数
1
解决办法
1337
查看次数

如何使用 Jetpack Compose Canvas 绘制带有描边和霓虹灯发光的正方形?

我需要绘制一个圆角正方形,类似于drawRoundRect,但只有轮廓。

像这样的东西。

在此输入图像描述

该图像是手工绘制的,正如我所说,我需要它看起来像drawRoundRect但没有轮廓(我不希望它看起来是手绘的)

如果你看到它,这条线有这样的渐变:红色 -> 白色 -> 红色

我需要同样的渐变。如果有人有想法或解决方案,我将不胜感激。

android canvas android-canvas android-jetpack-compose android-jetpack-compose-canvas

5
推荐指数
1
解决办法
3464
查看次数

Jetpack Compose:如何绘制这样的路径/线

我想使用画布实现如下图所示的效果。我怎样才能实现这样的目标?

在此输入图像描述

有什么可以参考的吗?

android android-jetpack-compose android-jetpack-compose-canvas

5
推荐指数
2
解决办法
7748
查看次数

矩形边框进度条

我如何使用 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

5
推荐指数
1
解决办法
776
查看次数

Jetpack Compose 中画布的重组

我正在使用 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

4
推荐指数
1
解决办法
6300
查看次数

在 Jetpack Compose 中从另一种形状切割出一种形状

我对在 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

4
推荐指数
1
解决办法
2769
查看次数