JAVA层次的Surface系统

1. 过程描述

android.view.Surfaceview类继承自android.view.View,view层次关系上提供精细绘制Surface的方法,可以通过它来改变Surface的格式、大小等。

android.view.SurfaceHolderSurfaceView提供的一个接口类。方便实现对Surface的控制。

android.view.Surface raw buffer的句柄,被screen compositor管理。

SurfaceView窗口可见的时候,会创建一个Surface对象。此时继承自SurfaceView的子类(继承了一个父类:SurfaceView实现一个接口:SurfaceHolder.Callback)需要重载android.view.SurfaceHolder.Callback(接口)提供的虚函数surfaceCreated(SurfaceHolder)。同样销毁的时候需要实现surfaceDestroyed(SurfaceHolder)虚函数。

整个过程如下:

1)子类(继承自SurfaceViewSurfaceHolder.Callback)获取SurfaceHolder(也是一个接口,SurfaceView以内部类的形式对其进行了实现)

2)将this指针添加到SurfaceHolder回调(SurfaceHolder.addCallback())中。

3)父类SurfaceView负责UpdateWindow并调用相应的回调函数(子类中的SurfaceHolder.Callback中的相应的接口实现)

4)子类中通过对虚函数重载,实现将内容画到Surface上。

2Java SurfaceActivity之间的关系

通过Activity提供的setContentView等方法将SurfaceView添加到主界面中。android.view.SurfaceSurfaceView的一个成员变量

3. Surface是什么

android.view.Surface中追踪:

public Surface(SurfaceSession s, int pid, int display, int w, int h, int format, int flags)

throws OutOfResourcesException {

mCanvas = new CompatibleCanvas();

init(s,pid,display,w,h,format,flags);

}

public Surface() { mCanvas = new CompatibleCanvas(); }

Surface的构造函数中可以看出,在其中主要是new了一个Canvas,也就是一个画布,由此我们不难猜测,这块画布对应于Surface的创建过程。所以Surface的本质就是一块内存区。注意CompatibleCanvasSurface的一个内部类。

4. SurfaceJNI接口

android.view.surface的实例化了一个mCanvas对象,其中通过多个JNI接口和其下层的本地化语言进行通信。主要的接口包括:

/**

* set surface parameters.

* needs to be inside open/closeTransaction block

*/

public native void setLayer(int zorder);

更多相关文章

  1. Android——自定义左右菜单的实现
  2. android hal层 c 堆栈打印方法
  3. Android(安卓)Netd介绍
  4. android JavaMail发送邮件(可发送附件)
  5. Android(安卓)源码
  6. android 中Bn 和Bp的区别
  7. Android(安卓)JNI 基础知识
  8. Rxjava+retrofit 添加公共请求参数及请求结果封装
  9. android jni 学习笔记2

随机推荐

  1. Android的NDK开发
  2. Android(安卓)动画整理(3.0以上)
  3. 丢失Android系统库或者Conversion to Dal
  4. WebView---Android与js交互实例
  5. Android4.2增加新键值
  6. android与js的交互
  7. android静默安装的实现(turn)
  8. Android培训班(38)
  9. flutter集成推送功能-小米推送集成
  10. Android requires compiler compliance l