通過 getHolder()方法可以得到這個 SurfaceHolder對象
發布時間:2013-9-17 16:07
發布者:
reggae
原理(來自Android的SDk文檔):
訪問SurfaceView的底層圖形是通過SurfaceHolder接口來實現的,通過 getHolder()方法可以得到這個 SurfaceHolder對象。你應該實現surfaceCreated(SurfaceHolder)和 surfaceDestroyed(SurfaceHolder)方法來知道在這個Surface在窗口的顯示和隱藏過程中是什么時候創建和銷毀的。
SurfaceView可以在多線程中被訪問。
注 意:一個SurfaceView只在SurfaceHolder.Callback.surfaceCreated() 和 SurfaceHolder.Callback.surfaceDestroyed()調用之間是可用的,其他時間是得不到它的Canvas對象的 (null)。
我的訪問過程:
創建一個SurfaceView的子類,實現SurfaceHolder.Callback接口。
得到這個SurfaceView的SurfaceHolder對象holder。
holder.addCallback(callback),也就是實現SurfaceHolder.Callback接口的類對象。
在SurfaceHolder.Callback.surfaceCreated()調用過后holder.lockCanvas()對象就可以得到SurfaceView對象對應的Canvas對象canvas了。
用canvas對象畫圖。
畫圖結束后調用holder.unlockCanvasAndPost()就把圖畫在窗口中了。
SurfaceView可以多線程訪問,在多線程中畫圖。
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.util.Log;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
- public class MySurfaceView extends SurfaceView implements
- SurfaceHolder.Callback {
- private Context mContext;
- private SurfaceHolder mHolder;
- public TouchScreenAdjusterSurfaceView(Context context,) {
- super(context);
- mContext = context;
- mHolder = TouchScreenAdjusterSurfaceView.this.getHolder();
- mHolder.addCallback(TouchScreenAdjusterSurfaceView.this);
- this.setFocusableInTouchMode(true); // to make sure that we can get
- // touch events and key events,and
- // "setFocusable()" to make sure we
- // can get key events
- }
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width,
- int height) {
- // TODO Auto-generated method stub
- }
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- //now you can get the Canvas and draw something here
- }
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- // TODO Auto-generated method stub
- }
- public void drawMyShape(PointPostion ps) {
- mCanvas = mHolder.lockCanvas();
- // draw anything you like
- mHolder.unlockCanvasAndPost(mCanvas);
- }
- }
復制代碼 希望本文對廣大安卓開發者有所幫助,感謝閱讀本文。更多安卓技術問題歡迎加群探討:314230976,驗證碼:eec,不寫驗證不予通過喲~
|