前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[030]王小二图解Android-UI绘制篇【文字版】

[030]王小二图解Android-UI绘制篇【文字版】

作者头像
王小二
发布2020-06-08 10:53:27
9900
发布2020-06-08 10:53:27
举报

前言

本文只是视频王小二图解Android【007】UI绘制篇的提纲和整理,建议配合视频学习

提纲

1.基础知识学习

1.1 Render APIs 例如OpenGL ES,本身只是协议规范,不是软件源码库,OpenGL ES本身也有CPU(软件)和GPU(硬件)版本实现。
1.2 NativeWindow,操作系统实现,Android中有Framebuffer和Surface。
   1.2.1 Framebuffer对应的就是屏幕
   1.2.2 Surface对应的就是Window,一个Activity 一个Dialog 一个Toast 其实都是对应一个Window
1.3 EGL,OpenGL ES和NativeWindow之间的桥梁
1.4 保证了OpenGL ES的平台独立性,相同的OpenGL代码运行在不同的平台,有相同的UI效果。
1.5 Skia,也是Render APIs,也有也有CPU(软件)和GPU(硬件)版本,但是GPU(硬件)版本是基于OpenGL ES。
1.6 SGL,Skia CPU(软件)版本和环境
1.7 Canvas,谷歌定义的一套更加简单易用的2D APIs,是由Skia实现的。

2.开机动画

2.1 申请Surface
2.2 创建EGL环境
2.3 定时的将图片通过OpenGL的渲染到Surface
2.4 没有Vsync信号

3.Activity

3.1 申请Surface(本地窗口)
3.2 创建View的树状结构
3.3 锁定Surface,获得Canvas的环境。
3.4 将Canvas环境递归给View。
3.5 开启硬件加速
  3.5.1 Canvas中Skia变成了硬件版本实现
  3.5.2 简单的树状结构变成DisplayList
3.6 invalidate中Damage(Dirty Rect)的理解
3.7 Vsync信号监听类Choreographer

4.SurfaceFlinger

    4.1 初始化Vsync信号,FrameBuffer(本地窗口)
    4.2 管理所有应用申请的Surface
    4.3 初始化OpenGL的环境
    4.4 按照Vsync信号,将可见的Surface用OpenGL绘制到FrameBuffer
    4.5 HWC,提升合成的速度

5.Flutter的实现原理猜测

5.1 新的跨平台编程语言Dart
5.2 新的Flutter UI框架
5.3 Flutter如何实现跨平台的背后 
  5.3.1 获得一个本地窗口,所有平台都有。
  5.3.2 UI框架设计了一堆控件,利用Skia的接口,直接绘制到本地窗口,Skia是跨平台
  5.3.3 对于开发人员只需要用跨平台的Dart语言,调用标准的Flutter控件。

总结

在研究Android UI绘制体系的时候,要不断的问自己,看的代码段在整个UI绘制体系中处于哪一层,哪一个进程,哪一个线程,希望我的视频有助于你们彻底掌握Android UI绘制体系。当然我讲个更多是概念,很多细节需要你们自己看源码。

彩蛋

下期预告,既然有UI的显示,也就是UI的Output,就必须讲UI的Input,也就是UI如何响应Touch,Key事件,《王小二图解Android-UI事件篇》敬请期待。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 提纲
    • 1.基础知识学习
      • 2.开机动画
        • 3.Activity
          • 4.SurfaceFlinger
            • 5.Flutter的实现原理猜测
            • 总结
            • 彩蛋
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档