SurfaceHolder
这是一个接口;view是它的父类,我们通过它来操作surface
通过这个接口我们可以去控制视图画面的显示。允许你去surface的尺寸和格式,
编辑surface的像素,控制更改surface的内容;
我们通过surfaceview类来创建他的实例对象。使其可用。
前面分析过了,利用canvas来绘画时候,应该再callback.surfacecreated回调方
法中用线程去实现。画布的lock与unlock整体完成后,绘图才会显示出来。
类中的常量值(用来声明控制的surface的类型):
SURFACE_TYPE_GPU(2): 创建适用于GUP加速的surface
SURFACE_TYPE_HARDWARE(1): 创建适用于DMA和硬件加速的surface
SURFACE_TYPE_NORMAL(0): 创建适用于RAM缓存原生数据的普通surface
SURFACE_TYPE_PUSH_BUFFERS(3): 创建一个不包含原生数据的surface,其
surface的数据来源是其他的对象提供,此类型不能用lockCanvas来获取Canvas对
象,否则报错。*****感觉好像不好使,画图还是播放视频都不影响,android4.4
的;
方法:
public abstract void addCallback (SurfaceHolder.Callback callback) :给
holder添加回调函数
public abstract Surface getSurface ():得到一个surface;但有时候不能获
得,例如:当使用SurfaceView, Surface的持有者直到该View隶属于当前窗口管
理器,确认布局大小和屏幕的位置后才进行创建,你通常需要实现
Callback.surfaceCreated寻找出可用的Surface。
public abstract Rect getSurfaceFrame () ://检索当前suface的大小
public abstract Canvas lockCanvas ()://返回一个可绘画的画布
public abstract Canvas lockCanvas (Rect dirty):指定一个脏区域,脏矩形
的内容一定被绘制
public abstract void removeCallback (SurfaceHolder.Callback callback)
:在surfaceview中删除先前调用的回调接口
public abstract void setFixedSize (int width, int height): 使surface
固定大小,他将永远不能该表大小,当和SurfaceView一起工作时,这必须被同一
运行的SurfaceView的窗口线程来调用
public abstract void setFormat (int format): 设置surface所需的像素格
式。默认是不透明的,当和SurfaceView一起工作时,这必须被同一运行的
SurfaceView的窗口线程来调用 参数 format PixelFormat的常量
public abstract void setKeepScreenOn (boolean screenOn) 当surface被显
示的时候是否启用或禁用屏幕保持打开状态,默认是禁用,允许屏幕关闭,启用
选项有效时,可以安全的调用任何线程
public abstract void setSizeFromLayout () : 允许suface基于容器的布局
来改变大小(这是默认的),当启用此功能,就应该监视surfaceChanged
(SurfaceHolder, int, int, int)应对suface的大小变化,当和SurfaceView一起
工作时,这必须被同一运行的SurfaceView的窗口线程来调用
public abstract void setType (int type) : 设置该surface的类型 参数
type 该surface的内存类型
public abstract void unlockCanvasAndPost (Canvas canvas) 在surface完
成编辑像素,该函数调用后,surface的当前像素就会在屏幕上显示。
这是一个接口;view是它的父类,我们通过它来操作surface
通过这个接口我们可以去控制视图画面的显示。允许你去surface的尺寸和格式,
编辑surface的像素,控制更改surface的内容;
我们通过surfaceview类来创建他的实例对象。使其可用。
前面分析过了,利用canvas来绘画时候,应该再callback.surfacecreated回调方
法中用线程去实现。画布的lock与unlock整体完成后,绘图才会显示出来。
类中的常量值(用来声明控制的surface的类型):
SURFACE_TYPE_GPU(2): 创建适用于GUP加速的surface
SURFACE_TYPE_HARDWARE(1): 创建适用于DMA和硬件加速的surface
SURFACE_TYPE_NORMAL(0): 创建适用于RAM缓存原生数据的普通surface
SURFACE_TYPE_PUSH_BUFFERS(3): 创建一个不包含原生数据的surface,其
surface的数据来源是其他的对象提供,此类型不能用lockCanvas来获取Canvas对
象,否则报错。*****感觉好像不好使,画图还是播放视频都不影响,android4.4
的;
方法:
public abstract void addCallback (SurfaceHolder.Callback callback) :给
holder添加回调函数
public abstract Surface getSurface ():得到一个surface;但有时候不能获
得,例如:当使用SurfaceView, Surface的持有者直到该View隶属于当前窗口管
理器,确认布局大小和屏幕的位置后才进行创建,你通常需要实现
Callback.surfaceCreated寻找出可用的Surface。
public abstract Rect getSurfaceFrame () ://检索当前suface的大小
public abstract Canvas lockCanvas ()://返回一个可绘画的画布
public abstract Canvas lockCanvas (Rect dirty):指定一个脏区域,脏矩形
的内容一定被绘制
public abstract void removeCallback (SurfaceHolder.Callback callback)
:在surfaceview中删除先前调用的回调接口
public abstract void setFixedSize (int width, int height): 使surface
固定大小,他将永远不能该表大小,当和SurfaceView一起工作时,这必须被同一
运行的SurfaceView的窗口线程来调用
public abstract void setFormat (int format): 设置surface所需的像素格
式。默认是不透明的,当和SurfaceView一起工作时,这必须被同一运行的
SurfaceView的窗口线程来调用 参数 format PixelFormat的常量
public abstract void setKeepScreenOn (boolean screenOn) 当surface被显
示的时候是否启用或禁用屏幕保持打开状态,默认是禁用,允许屏幕关闭,启用
选项有效时,可以安全的调用任何线程
public abstract void setSizeFromLayout () : 允许suface基于容器的布局
来改变大小(这是默认的),当启用此功能,就应该监视surfaceChanged
(SurfaceHolder, int, int, int)应对suface的大小变化,当和SurfaceView一起
工作时,这必须被同一运行的SurfaceView的窗口线程来调用
public abstract void setType (int type) : 设置该surface的类型 参数
type 该surface的内存类型
public abstract void unlockCanvasAndPost (Canvas canvas) 在surface完
成编辑像素,该函数调用后,surface的当前像素就会在屏幕上显示。