android 之 surface 句柄

 

看了网上的资料,总结如下:

一、surface

由屏幕显示内容合成器(screen compositor)所管理的 原生缓冲器的句柄。

就是一个句柄,即它是一个抽象的东东,就是一个操作接口

 

由Java方面的常规知识,我们知道通常画图是在一个Canvas对象上面进行的:

三个重要的类:View、Canvas、Paint

通过画笔可以在画布上画出各种图形,然后通过视图将画布内容展示在屏幕上。

 

二、SurfaceView 与 Surface的关系图示

三、SurfaceHolder

SurfaceHolder还提供了很多重要的方法(成员函数),其中最重要的就是:

1.        abstract void addCallback(SurfaceHolder.Callbackcallback)

           为SurfaceHolder添加一个SurfaceHolder.Callback回调接口。

2.        abstract Canvas lockCanvas()

           获取一个Canvas对象,并锁定之。所得到的Canvas对象,其实就是Surface中一个成员

           abstract Canvas lockCanvas(Rectdirty)  同上。但只锁定dirty所指定的矩形区域,因此效率更高。 

           同步锁机制的目的,就是为了在绘制的过程中,Surface中的数据不会被改变

3.        abstract void unlockCanvasAndPost(Canvascanvas)

           当修改Surface中的数据完成后,释放同步锁,并提交改变,然后将新的数据进行展示,同时Surface中相关数据会被丢失

 

四、三者之间的关系总结:

从设计模式的高度来看,Surface、SurfaceView和SurfaceHolder实质上就是广为人知的MVC,即Model-View-Controller。Model就是模型的意思,或者说是数据模型,或者更简单地说就是数据,也就是这里的Surface;View即视图,代表用户交互界面,也就是这里的SurfaceView;SurfaceHolder很明显可以理解为MVC中的Controller(控制器)。这样看起来三者之间的关系就清楚了很多。

 

五、Callback  作用:

前面已经讲到SurfaceHolder是一个接口(控制器),它通过回调方法的方式,来 让我们可以感知到Surface的创建、销毁或者改变。

1.     abstract void surfaceChanged(SurfaceHolderholder, int format, int width, int height)

当surface发生任何结构性的变化时(格式或者大小),该方法就会被立即调用

2.      abstract void surfaceCreated(SurfaceHolderholder)

当surface对象创建后,该方法就会被立即调用。

3.      abstract void surfaceDestroyed(SurfaceHolderholder)

当surface对象在将要销毁前,该方法会被立即调用。

 

关于SurfaceView, 这个类的目的之一,就是提供一个可以用另外一个线程(第二个线程)进行屏幕渲染的surface。译注:即UI线程和绘制线程可以分离。

 

 

 

 

转载请注明出处:http://blog.csdn.net/pathuang68/article/details/7351317
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值