这里就用安卓举例说明下我们的代码是怎么变成可视化界面的。
安卓编程代码
安卓早期采用java做为第一编程语言,现在是主推kotlin,还可以用flutter或者其他混合框架开发,这里不做多介绍。
上图是简单的控件展示,基本涵盖主要的交互功能。文字的大小颜色包括控件的间距都是可以通过代码调节。
图中的控件是谷歌编写好的,开发者可以直接使用,如果这些控件满足不了需求,你还可以自定义控件通过canvas实现。
通过源码可以知道,其实谷歌提供的这些控件也都是自定义控件。
那么java层面的代码是不能转换成可视化的界面的,那安卓是怎么实现的呢?
其实是通过调用底层(C语言)接口实现的。
底层(C语言)接口
我们自定义控件使用的就是最上面的
canvas.java
类实现的,最终会调用到底层的
libskia.so
文件,所以java层面的canvas实际上是封装的native层的方法。
可以这样理解,java层只是描述界面,具体实现由native层实现。
那么native层是怎么实现的呢?安卓底层使用C语言编写,里面有个SurfaceFlinger类,这个类获取界面宽,高,点密度,颜色分量的大小等信息后,交给硬件帧缓冲区去。
硬件帧缓冲区属于硬件驱动范畴了,超出了本人知识结界,这里就不BB了。
总结
不用设备有不同的图形驱动,编码只是实现界面的形状大小等描述,最终都会交给图形驱动层去渲染。编码层是为了更好的方便开发者。