学习UI 2+1原则
1、界面Component是如何呈现出来的。
呈现的两种方式:
XML Layout的呈现;
动态编码呈现:动态布局;画动态控件。
呈现的核心,牢牢把握住onDraw。平面图像Graphic-Canvas&Drawable简单介绍。
layoutinflator
View底层如何支持?
Application
java View/Widget/Canvas Open
Skia GL
Sunface
Skia,第三方2D画图引擎,后被google收购,现在开源。类似Linux上QT。
OpenGL,支持3D实现。
Sunface,frame buffer驱动支持
+1、UI Component放在哪?(复合界面布局)控件树的观念。
要搞清放哪,就要搞清楚ViewTree层级关系。类比HTML的ViewTree。
sample:view和viewgroup
SDK中的工具heirarchyviewer,层级视图的浏览,分析(商业软件)界面构成,层级关系。读取模拟器当前软件activity
2 、Android界面事件机制。
Android界面事件分类:
KeyEvent
TouchEvent
TrackballEvent-轨迹球,基本弃用。
Android界面事件的触发及分发:
事件,就是用户交互时触发的操作。
可以通过如下两种方式来启动事件交互:
1、定义一个事件监听程序(listener)并且注册它。以onClickListener()为例,注册往往命名setOnClickListener()。
2、重载已经回调的事件方法。override,这个往往用在你基于系统的View类进行扩展的时候用。(自定义组件?)
事件触发的两种方法:
扩展view的时候回调事件函数。-内
注册事件监听器。-外
事件分发dispatchKeyEvent:
keyEvent分发:
消息发到当前(activity)上下文
Context发到Window
window优先发给输入法窗体
发给rootView(DecorView)-层层找到focus
发给焦点子view
touchEvent分发:---根据位置(坐标)快速定位当前view
从下往上。onTouchEvent()返回false,继续事件上传。返回true,“我”处理了,不再上传。
如何使用自定义组件?(在layout中)
标签加上包即可:<sundy.viewtest.MyView .../>