2014-11-6Android学习------SurfaceView的框架源码

import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class MySurfaceView extends SurfaceView implements Callback {

	private SurfaceHolder holder;// 回调处理
	private MySurfaceViewThread mySurfaceViewThread;
	private boolean hasSurface;

	public MySurfaceView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		init();
	}

	private void init() {
		// TODO Auto-generated method stub
		// 创建一个新的SurfaceHolder, 并分配这个类作为它的回调(callback)
		holder = getHolder();
		holder.addCallback(this);
		hasSurface = false;
	}

	public void resume() {
		// 创建和启动图像更新线程
		if (mySurfaceViewThread == null) {
			mySurfaceViewThread = new MySurfaceViewThread();
			if (hasSurface == true)
				mySurfaceViewThread.start();
		}
	}

	// 内部类:
	public class MySurfaceViewThread extends Thread {

		private boolean done;

		MySurfaceViewThread() {
			super();
			done = false;
		}

		@Override
		public void run() {
			SurfaceHolder surfaceHolder = holder;

			// 重复绘图循环,直到线程停止
			while (!done) {
				// 锁定surface,并返回到要绘图的Canvas
				Canvas canvas = surfaceHolder.lockCanvas();

				// 待实现:在Canvas上绘图

				// 解锁Canvas,并渲染当前图像
				surfaceHolder.unlockCanvasAndPost(canvas);
			}
		}

		public void requestExitAndWait() {
			// 把这个线程标记为完成,并合并到主程序线程
			done = true;
			try {
				join();
			} catch (InterruptedException ex) {
			}
		}

		public void onWindowResize(int w, int h) {
			// 处理可用的屏幕尺寸的改变
		}

	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
		// TODO Auto-generated method stub
		if (mySurfaceViewThread != null)
			mySurfaceViewThread.onWindowResize(w, h);
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		// resume();
		hasSurface = true;
		if (mySurfaceViewThread != null)
			mySurfaceViewThread.start();
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		hasSurface = false;
		pause();
	}

	private void pause() {
		// TODO Auto-generated method stub
		// 杀死图像更新线程
		if (mySurfaceViewThread != null) {
			mySurfaceViewThread.requestExitAndWait();
			mySurfaceViewThread = null;
		}
	}

}

实现这个surfaceView的activity类:

import android.app.Activity;
import android.os.Bundle;

public class DemoActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(new MySurfaceView(this));
	}
	

}

写这个主要是前面用了一个SurfaceView,所有这里再单独学习下这个视图,

原文地址:http://www.cnblogs.com/qinjunni/archive/2012/02/24/2366392.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值