我有一个绘图应用程序,用户可以在其中用手指画线,调整颜色,粗细等。在用户绘图时,我正在将MotionEvent
集中的X / Y点从转换为SVG路径,还创建了Android路径和然后通过画布将Android路径绘制到屏幕上,并将SVG路径提交到应用程序的数据库。
我遵循的是FingerPaint中使用的模型,因为通过重复调用invalidate()
(因此是onDraw()
)来动态绘制“进行中”的线,一旦完成该行并开始新的一行,则前一行)是onDraw()
从基础绘制的Canvas
Bitmap
,进行中的行再次生成重复的重画。
在此应用程序中,此方法效果很好-直到你开始旋转基础Bitmap
以补偿设备旋转,从而支持在绘图表面上“放大”功能,因此必须缩放基础Bitmap
等。例如,在设备旋转和旋转的情况下,放大后的绘图,当用户绘图时,我们需要在onDraw()中缩放并旋转我们的位图,这绝对是在抓取。
我看过了SurfaceView
,但是由于它仍然使用相同的Canvas
机制,因此我不确定是否会看到明显的改进……所以我的想法转向了OpenGL。我读过某个地方OpenGL可以“免费”进行旋转和缩放,甚至看到谣言(第三条评论)Canvas
可能在将来的版本中消失。
从本质上讲,我在Canvas
OpenGL和OpenGL解决方案之间有些困惑……我有一个2D绘图应用程序,它Canvas
在一种状态下似乎完全适合模型,因为没有像游戏一样进行不断的重画(例如,当用户不是在绘图,我不需要任何重画),但是当用户在绘图时,我需要最大化必要的性能以对曲面执行一些日益复杂的事情...
欢迎任何想法,指示和建议。