Canvas基本使用

Canvas的意思是畫布,表現在屏幕上就是一塊區域,我們可以再上面使用各種API繪製我們想要的東西。可以說,Canvas貫穿整個2D Graphics,android.graphics中的所有類,幾乎都於Canvas有直接或間接的聯繫。所以瞭解Canvas是學習2D Graphics的基礎。
Android官方文檔對Canvas的簡介很好的介紹了Canvas的使用:

The Canvas class holds the “draw” calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels,
a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap),
and a paint (to describe the colors and styles for the drawing).

一個Canvas對象有四大基本要素:
1、一個用來保存像素的Bitmap
2、一個Canvas在Bitmap上進行繪製操作
3、繪製的東西
4、繪製的畫筆Paint

如何獲得一個Canvas對象

Canvas對象的獲取方式有三種:
第一種我們通過重寫View.onDraw方法,View中的Canvas對象會被當做參數傳遞過來,我們操作這個Canvas,效果會直接反應在View中。

第二種就是當你想自己創建一個Canvas對象。從上面的基本要素可以明白,一個Canvas對象一定是結合了一個Bitmap對象的。所以一定要爲一個Canvas對象設置一個Bitmap對象。

//得到一個Bitmap對象,當然也可以使用別的方式得到。但是要注意,改bitmap一定要是mutable(異變的)  
        Bitmap b = Bitmap.createBitmap(100,100, Bitmap.Config.ARGB_8888);  
        Canvas c = new Canvas(b);  
        /*先new一個Canvas對象,在調用setBitmap方法,一樣的效果 
         * Canvas c = new Canvas(); 
         * c.setBitmap(b); 
         */  

第三種方式,是調用SurfaceHolder.lockCanvas(),返回一個Canvas對象。

關於第二種方式,其實是一種雙緩存設計

閃爍是圖形編輯中的一個常見問題,當進行復雜的繪製操作的時候會導致呈現的圖像閃爍或具有其他不可接受的外觀.

雙緩衝的使用解決這些問題.雙緩衝使用內存緩衝區來解決由多重繪製操作造成的閃爍問題.

原因:

首先在內存緩衝區裏完成所有的繪製操作,而不是在屏幕上直接進行繪圖,當所有繪製操作完成後,把內存緩衝區完成的圖像直接複製到屏幕.因爲在屏幕上只執行一個圖形操作,所以消除了由複雜繪製操作所造成的圖像閃爍問題.

使用:

在android中實現雙緩衝,可以使用一個後臺畫布backcanvas,先把所有繪製操作都在這個上邊進行,等圖畫好了,然後再把backcanvas拷貝到與屏幕關聯的canvas上去,如下:

Bitmap bitmapBase = new Bitmap();
Canvas backcanvas = new Canvas(bitmapBase);
backcanvas.draw()...//畫圖

Canvas c = lockCanvas(null);
c.drawbitmap(bitmapBase);//把應經畫好的圖像輸出到屏幕上
unlock(c)...

參考:http://blog.csdn.net/lonelyroamer/article/details/8264189

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章