1

使用 Jetpack Compose 在屏幕上绘画时使用屏幕触摸事件(或 MotionEvents)只有几个指南。我找到的所有指南都涉及:

  1. 将触摸事件链接到 Jetpack Compose State,以便在每个新的触摸动作上触发重新组合(有点像invalidate()在旧的基于视图的 Android 方法中调用);
  2. 将该事件更改保存到记住的列表中;
  3. 然后在每次重组时重新绘制整个列表。

我找到的最好的指南是:Code Simple Android Jetpack Compose Drawing App ,这里有完整的代码。

只有几百个触摸事件,该算法的响应速度惊人。但是当列表中有数千个事件时,它开始变得有点像Schlemiel the Painter's Algorithm,并且变得越来越慢,直到它最终停止工作。

在旧的 Kotlin/Android 中,解决方法通常是绘制到由 bitmap 支持的 Canvas,因此您不需要在每个invalidate(). 但是我在 Jetpack Compose 中找不到无缝保存到位图的画布。

Jetpack Compose 中是否有一种方法可以简化rememberComposable Canvas 的内容,因此不需要在每次重新组合时重新绘制整个 Canvas?

如果做不到这一点,有没有办法用位图支持 Jetpack Compose Canvas,就像在旧的 Canvas 中一样?

据我所知,Jetpack Compose Painter()对象是我们应该使用的对象,但我终生无法弄清楚如何去做。

在 Painter() 对象中,我不知道如何访问一个drawScope在其中发出动态 Compose 命令的方法,例如drawLinedrawCircle。我能找到的只是你可以覆盖的地方drawScope.onDraw(),但我不知道如何将它用于我想要的。

任何指向我正确方向的帮助都会很棒!

4

0 回答 0