我有一個繪圖應用程序,用戶可以用他們的手指畫線,調整顏色,厚度等。當用戶正在繪製時,我將集成的X/Y點從MotionEvent
轉換爲SVG Paths ,然後創建Android Path's,然後通過Canvas將Android路徑繪製到屏幕上,並將SVG路徑提交到應用程序的數據庫。Android:Canvas vs OpenGL
我下面在FingerPaint使用的模型,在該「正在處理」線重複調用繪製在飛invalidate()
(因此,onDraw()
),一旦該行是完整的,新線開工,先前的線是從Canvas
Bitmap
中抽取的onDraw()
,並且正在進行的線再次產生重複的重新繪製。
在此應用程序中此工作正常 - 直到您開始旋轉底層的Bitmap
以補償設備旋轉,從而支持在圖面上「放大」的能力,從而不得不縮放底層的Bitmap
等等。 ,旋轉設備並繪製圖形,當用戶繪圖時,我們需要在onDraw()中縮放並旋轉我們的位圖,這絕對是爬行。
我看過SurfaceView
,但由於這仍然使用相同的Canvas
機制,所以我不確定我會看到明顯的改進......所以我的想法轉向了OpenGL。我曾經在某處讀過OpenGL可以做旋轉和基本上'免費'縮放,甚至看到rumors(第三條評論),Canvas
可能會在未來的版本中消失。
本質上,我有點卡在Canvas
和OpenGL解決方案之間...我有一個2D繪圖應用程序,似乎完美適合在一個狀態下的Canvas
模型,因爲沒有不斷重新繪製一個遊戲(例如,當用戶沒有繪製時,我不需要任何重新繪製),但是當用戶繪製時,我需要用表面來做一些日益複雜的事情所必需的最大性能...
歡迎任何想法,指針和建議。
幸運的是,我不會做任何文本,只是Android路徑,所以文本問題可能不會出現。 – 2011-06-10 17:19:44