使用情況時:糟糕表現在CustomView不斷拉
我要畫幾百行和文字對我的看法了幾件。我需要提供滾動效果,爲此我捕獲ACTION_MOVE
事件,並用更新的點重新繪製所有行。爲了得到慾望的結果,我嘗試了不同的方法,但都沒有按預期工作。
方法1
我製成,其延伸View
的自定義類。所有的繪圖和計算都直接在我的onDraw()
方法中完成。由於onDraw()
方法的操作太多,所以應用程序的性能非常差。我甚至使用檢查了性能配置文件GPU渲染,我可以看到這些線條非常高。
方法2
我創建了一個位圖,所有的線畫到我的位圖在另一個線程後,我用postInvalidate()
繪製位圖onDraw()
方法:
mBufferedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
mBufferedBitmap.eraseColor(Color.TRANSPARENT);
Canvas mBufferedCanvas = new Canvas(mBufferedBitmap);
drawLines(mBufferedCanvas)
postInvalidate();
因爲我抹去所有先前在位圖上繪製並用更新後的點繪製新線條時,屏幕上會閃爍。
方法3
我試圖延長我的自定義類來SurfaceView
並在另一個線程畫布對象執行所有操作。但由於SurfaceView
使用CPU進行繪圖操作,因此低配置移動設備的性能會較差。
任何人都可以指導我如何以更好的性能來實現這個任務嗎?
試着看['RenderScript'](https://developer.android.com/guide/topics/renderscript/ compute.html)。我自己並沒有使用這個框架,但是這對於它來說似乎是一個很好的用例。 – Bryan
我的用例不需要RenderScript。 – VijayRaj
不要在'onDraw()'中分配新的位圖,這就是爲什麼你有fps下降。 –