Android控件架构

2018-06-24  本文已影响0人  懒猫1105

Android控件架构

1. Android UI界面架构
UI界面架构图:

Activity -- PhoneWindow -- DecorView
                                | -- TitleView
                                | -- ContentView
DecorView详细视图:

DecorView -- LinearLayout
                    | -- ActionBar Container -- ActionBar
                    | -- FramentLayout -- activity_main.xml
2. View绘制流程
            
            | --- 背景    drawBackground()    不能重写 --- |
            |                                              |
            | --- 主体    onDraw()            可以重写 --- |
draw() ---- |                                              |
            | --- 子View  dispatchDraw()      可以重写 --- |
可以重写    |                                              |
            | --- 滚动条  onDrawForeground()  可以重写 --- |
            | --- 前景    onDrawForeground()  可以重写 --- |
        
3. View事件拦截机制

事件拦截机制涉及到的函数

  1. ViewGroup
    • public boolean dispatchTouchEvent(MotionEvent ev);//事件传递
    • public boolean onInterceptTouchEvent(MotionEvent ev);//事件拦截
    • public boolean onTouchEvent(MotionEvent ev);//事件处理
  2. View
    • public boolean dispatchTouchEvent(MotionEvent ev);//事件传递
    • public boolean onTouchEvent(MotionEvent ev);//事件处理

假设有ViewGroupA ViewGroupB View他们关系如下

ViewGroupA -- ViewGroupB -- View

如果不进行任何修改执行结果如下
ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupB dispatchTouchEvent
ViewGroupB onInterceptTouchEvent
View dispatchTouchEvent
View onTouchEvent
ViewGroupB onTouchEvent
ViewGroupA onTouchEvent

如果将 ViewGroupA onInterceptTouchEvent返回值改为true,结果如下
ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupA onTouchEvent

如果将 ViewGroupB onInterceptTouchEvent返回值改为true,结果如下
ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupB dispatchTouchEvent
ViewGroupB onInterceptTouchEvent
ViewGroupB onTouchEvent
ViewGroupA onTouchEvent

如果将 View onTouchEvent返回值改为true,结果如下
ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupB dispatchTouchEvent
ViewGroupB onInterceptTouchEvent
View dispatchTouchEvent
View onTouchEvent

如果将 ViewGroupB onTouchEvent返回值改为true,结果如下
ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupB dispatchTouchEvent
ViewGroupB onInterceptTouchEvent
View dispatchTouchEvent
View onTouchEvent
ViewGroupB onTouchEvent

总结:

4.自定义View绘制

东西太多,贴个参考网址:http://hencoder.com/

补充:

上一篇下一篇

猜你喜欢

热点阅读