2015-04-02 23 views
0

我想用垂直滾動和可能無限的空間繪製手指繪製應用程序。滾動可以鎖定/解鎖。
我知道2點的方式來做到這一點:無限滾動的手指繪圖應用程序

  • 讓與給定的寬度和高度的位圖,通過Canvas(Bitmap)繪製onTouchEvent(MotionEvent)點/線,繪製位圖onDraw(Canvas)
  • 將觸點保存到數組並將它們直接繪製在onDraw(Canvas)中。

但這兩種方法都有缺點:

  • OutOfMemoryException異常大的位圖。
  • 非常慢,無數滾動和OOM可能。

我有一個想法,使用窗口和讀/寫區域的位圖需求。所以有一個問題:如何將位圖寫入/附加到另一個位圖?

例如,我無法找到將200x200px位圖追加到8000x8000px位圖的適當方法。有沒有辦法做到這一點,沒有本地庫?

還是我完全錯了,有一個更簡單的方法來做我需要的?

回答

1

如何使用小型位圖網格,而不將它們附加到更大的位圖?當其中一個位圖離開屏幕時,將其保存到磁盤並銷燬或回收它,有點像GridView回收單元格(它重複使用相同的10個單元格以顯示可能無限的單元格網格)。保存整個圖形只是意味着將所有位圖保存到磁盤。

此方法的主要問題是在用戶滾動瀏覽視圖時從磁盤保存/加載塊的時間,這可能導致應用程序在短時間內凍結,但可以使其平滑(例如通過在後臺線程中預加載位圖)。

在列表中存儲觸摸點也是完全可能的,有很多方法可以加速繪圖部分,例如通過緩存屏幕上的內容並僅繪製用戶滾動時丟失的內容。哪一個最好取決於你將在你的視圖上畫什麼。

+0

嗯,聽起來真的很棒。沒有想到這一點。是的,我可以加快繪圖的速度,但我根本不喜歡這個解決方案。看起來像kludge。謝謝。 – hexonxons 2015-04-03 00:26:54