*****
**事件分發概述**
[TOC=6]
# 1. 什么是事件分發(事件分發的本質)
## 1.1 事件分發的對象是誰?
**答:事件**
* 當用戶觸摸屏幕時(View或ViewGroup派生的控件),將產生點擊事件(Touch事件)。
> Touch事件相關細節(發生觸摸的位置、時間、歷史記錄、手勢動作等)被封裝成MotionEvent對象
* 主要發生的Touch事件有如下四種:
* MotionEvent.ACTION\_DOWN:按下View(所有事件的開始)
* MotionEvent.ACTION\_MOVE:滑動View
* MotionEvent.ACTION\_CANCEL:非人為原因結束本次事件
* MotionEvent.ACTION\_UP:抬起View(與DOWN對應)
* 事件列:從手指接觸屏幕至手指離開屏幕,這個過程產生的一系列事件 任何事件列都是以DOWN事件開始,UP事件結束,中間有無數的MOVE事件,如下圖:

即當一個MotionEvent 產生后,系統需要把這個事件傳遞給一個具體的 View 去處理。
## 1.2 事件分發的本質
**答:將點擊事件(MotionEvent)向某個View進行傳遞并最終得到處理**
> 即當一個點擊事件發生后,系統需要將這個事件傳遞給一個具體的View去處理。**這個事件傳遞的過程就是分發過程。**
## 1.3 事件在哪些對象之間進行傳遞?
**答:Activity、ViewGroup、View**
> 一個點擊事件產生后,傳遞順序是:Activity(Window) -> ViewGroup -> View
* Android的UI界面是由Activity、ViewGroup、View及其派生類組合而成的

* UI界面
* View是所有UI組件的基類
> 一般Button、ImageView、TextView等控件都是繼承父類View
* ViewGroup是容納UI組件的容器,即一組View的集合(包含很多子View和子VewGroup),
> 1. 其本身也是從View派生的,即ViewGroup是View的子類
> 2. 是Android所有布局的父類或間接父類:項目用到的布局(LinearLayout、RelativeLayout等),都繼承自ViewGroup,即屬于ViewGroup子類。
> 3. 與普通View的區別:ViewGroup實際上也是一個View,只不過比起View,它多了可以包含子View和定義布局參數的功能。
## 1.4 事件分發過程由哪些方法協作完成?
**答:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()**

## 1.5 總結
* Android事件分發機制的本質是要解決:**點擊事件由哪個對象發出,經過哪些對象,最終達到哪個對象并最終得到處理。**
> 這里的對象是指Activity、ViewGroup、View
* Android中事件分發順序:**Activity(Window) -> ViewGroup -> View**
* 事件分發過程由dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()三個方法協助完成
# 2. 為什么要有事件分發
解決一些沖突 如:
1. ScrollView簽到ListView或GridView滑動沖突解決方案
2. ViewPager嵌套ViewPager滑動沖突解決方案
- 咨詢項目實戰
- 第一單元 HTTP協議
- 1.1 OSI七層模型
- 1.2 HTTP協議(重點)
- 1.3 HTTPS協議(了解)
- 1.4 TCP/IP協議擴展
- 1.5 WebService簡介及實戰(無接口)
- 1.6 課后練習
- 第二單元 HTTPURLConnection
- 2.1 ANR
- 2.2 網絡判斷
- 2.3 HTTPURLConnection
- 2.4 課后練習
- 第三單元 AsyncTask
- 3.1 AsyncTask概述
- 3.2 AsyncTask基本使用
- 3.3 課后練習
- 第四單元 圖片異步加載
- 4.1 圖片異步加載概述
- 4.2 LruCache
- 4.3 DiskLRUCache
- 4.4 圖片三級緩存概述
- 4.5 封裝圖片加載緩存框架
- 第五單元 ListView多條目
- 5.1 ListView多條目概述
- 5.2 ListView多條目的使用
- 第六單元 ListView實現下拉刷新上拉加載
- 6.1 下拉刷新和上拉加載更多
- 6.2 XListView概述
- 6.3 XListView的使用
- 第七單元 封裝網絡框
- 7.1 封裝網絡框架概述
- 7.2 網絡框架的封裝
- 第八單元 項目介紹
- 8.1 公司項目團隊架構簡介
- 8.2 項目文檔及項目流程介紹
- 8.3 項目管理
- 8.4 項目開發
- 第九單元 項目框架搭建
- 9.1 基類封裝概述
- 9.2 Application中初始化配置
- 9.3 項目中的工具類
- 9.4 封裝網絡請求框架
- 9.5 封裝圖片異步緩存框架
- 第十單元 搭建UI框架1
- 10.1 側滑菜單概述
- 10.2 主界面框架搭建
- 第十一單元 搭建UI框架2
- 11.1 TabLayout的概述
- 11.2 TabLayout的使用
- 第十二單元 圖片上傳
- 12.1 圖片上傳概述
- 12.2 圖片上傳的實現
- 第十三單元 PullToRefresh
- 13.1 PullToRefresh概述
- 13.2 PullToRefresh的使用
- 13.3 緩存業務實現思路
- 第十四單元 事件分發及滑動沖突
- 14.1 事件分發概述
- 14.2 事件分發流程
- 14.3 事件分發的使用
- 第十五單元 傳感器的基本使用
- 15.1 傳感器概述
- 15.2 傳感器的使用
- 第十六單元 HTML與CSS復習
- 16.1 HTML
- 16.2 CSS
- 第十七單元 js復習
- 17.1 js基礎語法
- 17.2 js數組和內置對象
- 17.3 js常用事件
- 17.4 js對象模型
- 17.5 js 正則表達式
- 第十八單元 WebView
- 18.1 WebView 概述
- 18.2 WebView的使用
- 18.3 WebView與js交互
- 第十九單元 項目案例
- 項目概述
- 第二十單元 項目答辯
- 周考
- 第一周周考
- 第二周周考
- 第三種周考
- 月考
- 接口文檔