我有一个绘图应用程序,用户可以用手指画线,并调整颜色、粗细等。当用户绘制时,我将
我遵循了FingerPaint中使用的模型,在其中“正在进行”的线条通过重复调用
这在这个应用程序中很好地工作 - 直到您开始旋转底层的
我看了一下
基本上,我有点陷入了
欢迎任何想法、指针和建议。
MotionEvent
中的X/Y点转换为SVG路径,同时创建Android Path,然后通过Canvas将Android Path绘制到屏幕上,并将SVG Path提交到应用程序的数据库中。我遵循了FingerPaint中使用的模型,在其中“正在进行”的线条通过重复调用
invalidate()
(因此,onDraw()
)实时绘制,一旦线条完成并开始新的线条,以前的线条将从底层的Canvas
Bitmap
中在onDraw()
中绘制,而正在进行的线条再次生成重复的重新绘制。这在这个应用程序中很好地工作 - 直到您开始旋转底层的
Bitmap
以补偿设备旋转,支持“缩放”绘图表面的能力,因此必须缩放底层的Bitmap
等。例如,当设备旋转并且绘图缩放时,当用户绘制时,我们需要在onDraw()
中缩放和旋转我们的Bitmap,并且这是非常慢的。我看了一下
SurfaceView
,但由于它仍然使用相同的Canvas
机制,我不确定是否会看到明显的改进...所以我的想法转向OpenGL。我曾经在某个地方读到过,OpenGL可以免费进行旋转和缩放,甚至看到了Canvas
可能在未来版本中消失的传言(第三条评论)。基本上,我有点陷入了
Canvas
和OpenGL解决方案之间...我有一个2D绘图应用程序,在一个状态下似乎完美地适合Canvas
模型,因为没有像游戏那样不断重新绘制(例如,当用户不绘制时,我不需要任何重新绘制),但当用户正在绘制时,我需要尽可能高的性能来对表面进行一些越来越复杂的操作...欢迎任何想法、指针和建议。