我想畫一個動畫。爲此,我擴展了View並重寫了onDraw()方法。我所期望的是,每次調用onDraw()時,畫布將處於我將其放入的狀態,並且我可以選擇將其清除或僅繪製其中的一部分(這是我使用SurfaceView時的工作方式),但每次畫布回來時都已清除。有沒有辦法讓我清除?或者,也許將以前的狀態保存到一個位圖中,這樣我就可以繪製該位圖,然後繪製它的頂部?Android View.onDraw()總是有一個乾淨的畫布
回答
我不確定是否有辦法。但對於我的自定義視圖,我要麼在每次調用onDraw()時重繪所有內容,要麼繪製到位圖,然後將位圖繪製到畫布上(就像您在問題中所建議的那樣)。
這裏是我如何做到這一點
class A extends View {
private Canvas canvas;
private Bitmap bitmap;
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (bitmap != null) {
bitmap .recycle();
}
canvas= new Canvas();
bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
}
public void destroy() {
if (bitmap != null) {
bitmap.recycle();
}
}
public void onDraw(Canvas c) {
//draw onto the canvas if needed (maybe only the parts of animation that changed)
canvas.drawRect(0,0,10,10,paint);
//draw the bitmap to the real canvas c
c.drawBitmap(bitmap,
new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()),
new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), null);
}
}
您應該看看here來查看基本視圖和surfaceView之間的區別。一個surfaceView有一個繪圖的專用圖層,我認爲它可以跟蹤你之前畫的東西。現在,如果你真的想在基本視圖上做到這一點,你可以嘗試把你繪製的每個項目放在一個數組中,例如itemized overlay for the mapview的例子。 它應該幾乎相同的方式
您的預期不不願寄希望於瓦特/現實:)畫布不會是你離開的方式,但它不是空白。您可以創建要繪製的對象的ArrayList(canvas.drawCircle(),canvas.drawBitmap()等),然後遍歷OnDraw()中的ArrayList。我是圖形編程新手,但我已經在小範圍內使用它。也許有更好的方法。
它是如果你創建畫布。通過這種方式,您可以完全控制所繪製的內容。 – CaseyB 2010-03-31 21:05:12
而不是Arraylist:您可以使用Picture類記錄繪圖調用。 – 2013-06-04 07:27:33
- 1. HTML5乾淨的畫布與按鈕
- 2. kivy語言的乾淨畫布
- 3. View.onDraw錯誤地調用畫布
- 4. 測試後總是清理乾淨?
- 5. 一個乾淨的格式
- 6. CSS乾淨動畫重複
- 7. 乾淨地轉換一個Objective-C布爾到Swift布爾?
- 8. Android畫布 - 畫一個洞
- 9. Python是否有一個乾淨的測試字典元素?
- 10. 一個簡單的,乾淨的網頁佈局
- 11. 是否有一個乾淨的方式來顯示一個連字符與haml
- 12. 創建一個乾淨的功能
- 13. 創建一個乾淨的抽象層
- 14. .htacess - 寫一個乾淨的URL
- 15. 如何製作一個乾淨的.htaccess?
- 16. SQLAlchemy AssociationProxy上一個乾淨的POPO?
- 17. 乾淨的體系結構:在Android上有多個UseCases的ViewModel
- 18. 運行時錯誤總是在乾淨的構建後消失
- 19. R.java在一個乾淨的Android項目上缺失
- 20. 從Eclipse運行一個乾淨的Android構建?
- 21. 是Hibernate搜索Lucene的一個乾淨的抽象?
- 22. django是否創建一個乾淨的數據庫?
- 23. 這是一個乾淨的BDD/MSpec測試?
- 24. 3個活動之間的動畫/轉換乾淨
- 25. yii創建一個沒有資產的乾淨應用程序
- 26. python函數聲明有一個可讀和乾淨的代碼?
- 27. 粗CSS邊框沒有給出一個乾淨的矩形
- 28. 我需要一個沒有參數的乾淨網址
- 29. Python沒有創建一個新的乾淨實例?
- 30. 乾淨的URL與.htaccess但只有一個網址
我只是在一小會兒之前就明白了這一點!感謝您的輸入! – CaseyB 2010-03-11 16:43:43
繪製緩衝區可以正常工作,但是這個巨大的drawBitmap()方法吃了大量的FPS :( – 2011-08-13 20:00:42
這對我來說現在是一個瓶頸 - 每次在onDraw中繪製全屏位圖以恢復以前的狀態幾乎不會影響高分辨率設備的FPS就像Kindle 8.9第三代產品,帶有2560x1600)真的沒有辦法強制畫布堅持以前的狀態嗎?深入OpenGL可能可以解決性能問題,但它不是那時候的方式 – 2014-02-26 21:32:14