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

来源:互联网 发布:淘宝网电话 编辑:程序博客网 时间:2024/05/18 01:21
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 stubinit();}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;}@Overridepublic void run() {SurfaceHolder surfaceHolder = holder;// 重复绘图循环,直到线程停止while (!done) {// 锁定surface,并返回到要绘图的CanvasCanvas 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) {// 处理可用的屏幕尺寸的改变}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {// TODO Auto-generated method stubif (mySurfaceViewThread != null)mySurfaceViewThread.onWindowResize(w, h);}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stub// resume();hasSurface = true;if (mySurfaceViewThread != null)mySurfaceViewThread.start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubhasSurface = 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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(new MySurfaceView(this));}}

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

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

0 0