android動畫之SurfaceView

由於view有以下兩個缺陷:
1、缺乏雙緩衝機制;
2、當需要更新view上面的圖像時,必須重繪整個圖像,效率低下;
因此SurfaceView登場了!SurfaceView一般與SurfaceHolder結合使用,SurfaceHolder用來在SurfaceView上畫圖,它使用下面的方法來獲取Canvas對象:
lockCanvas(Rect rect); //獲取指定區域,畫圖時只對指定區域進行更新,可以提高效率。
lockCanvas();
繪圖完成後,使用下面的方法來釋放繪圖,提交所繪製的圖形:
unlockCanvasAndPost(Canvas canvas);
需要說明的是該方法之後繪製的圖形還處於緩衝中,下次再lockCanvas時,可能會"遮擋"它。
SurfaceHolder還可以添加回調函數,callbak中有三個方法:
public void surfaceCreated(SurfaceHolder holder); //SurfaceView被創建時調用
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height); //SurfaceView格式或大小發生變換時調用
public void surfaceDestroyed(SurfaceHolder holder); //SurfaceView被銷燬時調用

看一個例子,基於SurfaceView開發一個示波器,效果如下:


關鍵代碼如下:
view1 = (SurfaceView)findViewById(R.id.surfaceview1);
holder = view1.getHolder();

Canvas canvas = holder.lockCanvas(new Rect(cx,cy-2,cx+2,cy+2));
canvas.drawPoint(cx,cy,paint);
...

holder.unlockCanvasAndPost(canvas);

完整源碼下載地址:點擊打開鏈接

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