Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系
1、Surface
Surfaceextends Object
implements ParcelableParcelableKnown Indirect SubclassesSurfaceViewextends View
Known Direct Subclasses
3、SurfaceHolder
SurfaceHolder3.1、abstract void addCallback(SurfaceHolder.Callback callback)
Add a Callback interface for this holder.// 给SurfaceHolder一个回调对象。
3.2、abstract Canvas lockCanvas(Rect dirty)
Just like lockCanvas() but allows specification of a dirty rectangle.
// 锁定画布中的某一个区域,返回的画布对象Canvas(当更新的内容只有一个区域时,同时要追求高效,可以只更
新一部分的区域,而不必更新全部画布区域)
3.3、abstract Canvas lockCanvas()
Start editing the pixels in the surface.// 锁定画布,返回的画布对象Canvas
3.4、abstract void removeCallback(SurfaceHolder.Callback callback)
Removes a previously added Callback interface from this holder.//移除回调对象
3.5、abstract void unlockCanvasAndPost(Canvas canvas)
Finish editing pixels in the surface.// 结束锁定画图,并提交改变。
4、SurfaceHolder.Callback
SurfaceHolder.CallbackKnown Indirect Subclasses
@MySurfaceView.java
/* * author: conowen * e-mail: conowen@hotmail.com * date : 2012.8.4 */package com.conowen.SurfaceViewDemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;public class MySurfaceView extends SurfaceView implementsSurfaceHolder.Callback {private String TAG = "conowen";private SurfaceHolder sfh;private boolean ThreadFlag;private int counter;private Canvas canvas;private Thread mThread = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile (ThreadFlag) {// 锁定画布,得到Canvas对象canvas = sfh.lockCanvas();// 设定Canvas对象的背景颜色canvas.drawColor(Color.GREEN);// 创建画笔Paint p = new Paint();// 设置画笔颜色p.setColor(Color.RED);// 设置文字大小p.setTextSize(40);// 创建一个Rect对象rect// public Rect (int left, int top, int right, int bottom)Rect rect = new Rect(100, 50, 400, 350);// 在canvas上绘制rectcanvas.drawRect(rect, p);// 在canvas上显示时间// public void drawText (String text, float x, float y, Paint// paint)canvas.drawText("时间 = " + (counter++) + " 秒", 500, 200, p);if (canvas != null) {// 解除锁定,并提交修改内容,更新屏幕sfh.unlockCanvasAndPost(canvas);}try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}});public MySurfaceView(Context context) {super(context);// TODO Auto-generated constructor stub// 通过SurfaceView获得SurfaceHolder对象sfh = this.getHolder();// 为SurfaceHolder添加回调结构SurfaceHolder.Callbacksfh.addCallback(this);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stubLog.i(TAG, "surfaceChanged");}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubLog.i(TAG, "surfaceCreated");counter = 0;ThreadFlag = true;mThread.start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubLog.i(TAG, "surfaceDestroyed");ThreadFlag = false;}}