Android中的SurfaceView

一、SurfaceView.getHolder

不常用這種方法

例如:

public class SurfaceViewActivity extends Activity{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.surfaceview);
		SurfaceView surfaceView = (SurfaceView)findViewById(R.id.SurfaceView01);
		surfaceView.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				SurfaceView surfaceView = (SurfaceView)v;
				Canvas canvas = surfaceView.getHolder().lockCanvas();//加鎖
				Paint paint = new Paint();
				paint.setColor(Color.WHITE);
				canvas.drawText("Hello!",100,100, paint);
				surfaceView.getHolder().unlockCanvasAndPost(canvas);
			}
		});
	}
	
}

二、SurfaceView.Callback

常用會繼承SurfaceView類,實現SurfaceHolder.Callback接口,在Callback方法內來描繪。

例如:

public class MyCameraActivity extends Activity{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(new MySurfaceView(this));
	}
	
	//MySurfaceView
	class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{

		public MySurfaceView(Context context) {
			super(context);
			//SurfaceHolder.addCallback(callback)添加回調函數
			getHolder().addCallback(this);
		}

		@Override
		public void surfaceChanged(SurfaceHolder holder, int format, int width,
				int height) {
			Log.d("TEST", "surfaceChanged");
			
		}

		@Override
		public void surfaceCreated(SurfaceHolder holder) {
			Log.d("TEST", "surfaceChanged");
			Canvas canvas = holder.lockCanvas();
			Paint paint = new Paint();
			canvas.drawColor(Color.WHITE);
			paint.setColor(Color.BLUE);
			paint.setAntiAlias(true); //設置畫筆的鋸齒效果
			paint.setTextSize(24);
			canvas.drawText("Hello,Android SurfaceView!",0,paint.getTextSize(),paint);
			holder.unlockCanvasAndPost(canvas);
		}

		@Override
		public void surfaceDestroyed(SurfaceHolder holder) {
			Log.d("TEST", "surfaceDestroyed");
		}
	}
}


發佈了60 篇原創文章 · 獲贊 12 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章