SurfaceView
是 Android 框架中的一个视图,它允许应用程序在用户界面上显示图像数据。不同于普通的 View
对象,SurfaceView
可以显示来自 Surface
的动态视频流或相机预览,而不需要进行额外的位图转换。以下是对 Android 中 SurfaceView
的全面分析:
结构体和类
- SurfaceView (java层面): 继承自
View
,是一个可以在其上绘制的窗口。 - Surface (java层面): 用于在应用程序和原生窗口(
ANativeWindow
)之间传递图像数据。 - SurfaceHolder (java层面): 一个接口,允许应用程序在
Surface
上进行操作,如锁定和解锁Canvas
。 - ANativeWindow (本地层面): 一个 C/C++ 结构体,表示原生窗口,与
Surface
相关联。
使用方法
SurfaceView
的使用通常涉及以下步骤:
- 在布局文件中定义: 在 XML 布局文件中定义
SurfaceView
,指定其尺寸和位置。 - 获取 SurfaceView 实例: 在 Activity 或 Fragment 中通过
findViewById
获取SurfaceView
实例。 - 获取 SurfaceHolder: 调用
getHolder()
方法获取与SurfaceView
关联的SurfaceHolder
。 - 设置 SurfaceCallback: 设置
SurfaceHolder.Callback
接口的实现,以便在Surface
创建或更改时获得通知。 - 锁定 Canvas: 在
SurfaceHolder.Callback
的surfaceCreated()
方法中锁定Canvas
并开始绘制。