Android:Canvas vs OpenGL

Pau*_*ega 15 android canvas opengl-es

我有一个绘图应用程序,用户可以用手指画线,调整颜色,厚度等.当用户绘图时,我将集合的X/Y点MotionEvent转换为SVG路径,以及创建Android路径和然后通过Canvas将Android Path's绘制到屏幕上,并将SVG Path提交到应用程序的数据库.

我正在关注FingerPaint中使用的模型,因为"进行中"行是通过重复调用invalidate()(以及因此onDraw())动态绘制的,一旦行完成并且新行开始,前一行(s) )onDraw()从底层抽取Canvas Bitmap,进行中的线再次产生重复的重绘.

这在此应用程序中工作正常 - 直到您开始旋转底层Bitmap以补偿设备旋转,支持在绘图表面上"放大"并因此必须缩放底层Bitmap等的能力.例如,设备旋转和缩放的图形,当用户绘图时,我们需要在onDraw()中缩放和旋转我们的位图,这绝对是爬行的.

我看了一下SurfaceView,但由于这仍然使用相同的Canvas机制,我不确定我会看到明显的改进......所以我的想法转向OpenGL.我已经读过某个地方,OpenGL可以基本上"免费"进行旋转和缩放,甚至可以看到未来版本中可能消失的谣言(第三条评论)Canvas.

从本质上讲,我在CanvasOpenGL解决方案之间有点困难......我有一个2D绘图应用程序,Canvas在一个状态下似乎完全适合模型,因为没有像游戏那样不断的重新绘制(例如当用户没有绘图我不需要任何重新绘图),但是当用户绘图时,我需要最大的性能来完成表面上一些越来越复杂的事情......

欢迎任何想法,指示和建议.

mah*_*.cs 6

OpenGL 将能够轻松处理旋转和缩放。

老实说,您可能需要学习很多 OpenGL 才能做到这一点,特别是与以下主题相关:

  • 几何学
  • 照明(或只是禁用它)
  • 挑选(选择要在其上绘制的几何图形)
  • 像素地图
  • 纹理贴图
  • 映射

此外,为此学习 OpenGL 可能有点矫枉过正,您必须非常擅长它才能使其高效。

相反,我建议使用构建在 openGL 之上的游戏库的图形组件,例如: