TextView源码分析
https://blog.csdn.net/luoshengyang/article/details/8636153
1 绘制材料的准备
画布(绘制过程) + 输入(接受客户交互)
Activity窗口的组成是:PhoneWindow对象,一个DecorView对象,以及一个ViewRoot对象;
- PhoneWindow对象用来形容窗口对象,本身也是一个View
- DecorView对象用来形容窗口的顶层视图(装填子View)
ViewRoot对象除了用来与WindowManagerService服务通信之外,还用来接收客户输入。
image
2 TextView的绘制过程
- 测量(Measure): 告诉父视图自己的所占据的空间的大小
- 布局(Layout): 控件的位置
- 绘制(Draw):
?Java层的Canvas实际上是封装了C++层的SkCanvas。C++层的SkCanvas内部有一块图形缓冲区,这块图形缓冲区就是窗口的绘图表面(Surface)里面的那块图形缓冲区。
?窗口的绘图表面里面的那块图形缓冲区实际上是一块匿名共享内存,它是SurfaceFlinger服务负责创立的。
http://blog.csdn.net/luoshengyang/article/details/7846923
?SurfaceFlinger服务创立完成这块匿名共享内存之后,就会将其返回给窗口所运行在的进程。窗口所运行在的进程取得了这块匿名共享内存之后,就会映射到自己的进程空间来,因而,窗口的控件即可以在本进程内访问这块匿名共享内存了,实际上就是往这块匿名共享内存填入UI数据。注意,这个过程执行完成之后,控件的UI还没有反映到屏幕上来,由于这时候将控件的UI数据填入到图形缓冲区而已。
http://blog.csdn.net/luoshengyang/article/details/8462738
?窗口的UI的显示是WindowManagerService服务来控制的。因而,当窗口的所有控件都绘制完成自己的UI之后,窗口就会向WindowManagerService服务发送一个Binder进程间程通信请求。WindowManagerService服务接收到这个Binder进程间程通信请求之后,就会请求SurfaceFlinger服务刷新相应的窗口的UI。
3 TextView的获取键盘输入过程
http://blog.csdn.net/luoshengyang/article/details/6882903
每一个窗口的创立的时候,都会与系统的输入管理器建立一个客户输入接收通道。输入管理器在启动两个线程,其中一个用来监控客户输入,即监控客户能否按下或者者放开了键盘按键,或者者能否触摸了屏幕,另外一个用来将监控到的客户输入事件分发给当前激活的窗口来解决,而这个分发过程就是通过前面建立的通道来进行的.
ViewRoot类的成员函数deliverKeyEvent负责分发键盘输入事件,而ViewRoot类的成员函数deliverPointerEvent负责分发触摸屏输入事件
image
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » TextView源码分析
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » TextView源码分析