Android的GUI系统由C语言框架和JAVA语言框架组成。对下层,Android的GUI系统通过调用显示输出设备和输入设备的驱动,从而将Android的软件系统和底层的硬件联系起来。对上层,Android的GUI系统提供了Java层次的绘图结构,Android的Java框架层调用这些绘图接口来构建各种UI元素,这些绘图接口也可以供Java应用程序层来调用。
Android的GUI系统架构图如图1所示:
图1 GUI系统框架图
其中驱动包括FrameBuffer驱动,Event输入驱动等。
由上图可知,libui是提供接口的框架库,其他的库大部分通过继承并实现libui中定义的类来实现相应的功能。因此,理解libui的构造对于了解GUI的整体框架存在必然性。以下就来介绍一下该库。
2 libui库
libui是Android在本地层次一个框架性质的集成库,它不仅是现实的中枢,也是整个AndroidGUI系统的中枢。
这个库提供了一些接口,由其他的库通过类继承方式来实现,而调用者只需要调用libui库的接口即可。libui库包含了颜色格式,Egl窗口(用户显示),按键及事件处理,Surface(显示界面),Overlay(显示叠加层接口),Camera(照相机接口)等多个方面的定义。
libui库中包含的内容如下:
1) Format(颜色格式))部分
这个部分本身定义颜色空间的枚举类型和数据结构,它需要重用pixelflinger中的一些数据格式的定义。
2) Native Windows(本地窗口)部分
本部分用于实现一个本地显示的接口,也就是实现一个egl_native_window_t类,程序通过调用从而实现基本的显示功能。
3) Key/Event(按键和时间处理)部分
本部分是系统输入的基础,其中定义按键的映射,通过操作Event时间设备来实现获取系统的输入。
4) Surface(显示界面)部分
本部分定义了显示界面较高层次的接口,包含部分显示界面的管理功能。
5) Overlay(显示部分的叠加层)部分
定义了一个叠加的显示输出层接口,覆盖在主显示层之上,常用于视频输出。
6) Camera(照相机)部分
定义摄像头的框架和接口。