Android事件处理--读书笔记
2013-12-28?17:57:17?
1. Android提供了兩種方式的事件處理:基于回調和基于監聽的事件處理;
1.1 對基于監聽的事件處理而言,主要做法是為Android界面組件綁定特定的事件監聽器;
1.2 對基于回調的事件處理而言,主要是重寫Android組件特定的回調方法,或者重寫Actvity的回調方法;
一般來說,基于回調的事件可用于處理一些具有通用性的事件,但對于某些特定的事件,只能采用基于監聽的事件處理;
2. 基于監聽的事件處理
2.1 處理模型:EventSource,Event 和Event Listener。
2.2 事件處理機制是一種委派式事件處理方式:普通組件(事件源)將整個事件處理委托個特定的對象(事件監聽器),當該事件源發生指定的事件時,就通知所委派的事件監聽器來處理。
2.3 使用規則:確定事件源,創建合適的事件監聽器,注冊。
2.4 當外部動作在Android組件上進行操作時,系統會自動生成事件對象,同時作為參數被傳遞給注冊到事件源上的事件監聽器。
3. 基于回調的事件處理
3.1 對于基于回調的事件處理模型來說,事件源和事件監聽器是統一的,當用戶在GUI組件上激發某個事件時,組件自己特定的方法將會自動處理該事件。
3.2 基于回調的事件傳播:所有基于回調的事件處理方法都有一個boolean類型的返回值,用于標識該處理方法是否能完全處理該事件。
3.3 如果返回ture,表示該處理方法已完全處理該事件,不會傳播出去,false反之。
3.4 比較典型的是繼承View來重寫他的回調方法以實現我們的目的。
4.?關于觸摸事件的分發及處理
4.1 onInterceptTouchEvent(MotionEvent ev),只有繼承自ViewGroup的類才會有這個方法,
所以像TextView,ImageView等都是沒有這個方法的,這個方法類似于小秘書的角色,負責攔截過濾事件,
也就是說當前類是否要處理收到的Touch event取決于這個方法的過濾,return true表示當前View要處理,
系統會啟動onTouchEvent()方法,并且以后所有的事件都會直接來找這個View,當然,如果父View中途插手,那另當別論,
return false 表示自己不處理,系統會繼續向下(子View)分發事件;
4.2 如果onTouchEvent()不處理,直接返回false,那么交給父View去處理,直到根View,如果還沒人處理,那這個事件就消失了;
4.3 如果onTouchEvent()處理,那么將收到的Touch Event分解為具體的ACTION_DOWN, ACTION_MOVE,ACTION_UP等事件予以處理;
4.4 dispatchTouchEvent()負責分發TouchEvent,是三個方法中最先執行的,最好返回super.dispatchTouchEvent(ev);
每一級View的該方法都會執行,然后執行onInterceptTouchEvent(),如果有的話,最后根據onInterceptTouchEvent的返回值,來決定是否要啟動onTouchEvent。
更多詳細:http://www.cnblogs.com/xiaoQLu/archive/2012/04/28/2474443.html
轉載于:https://www.cnblogs.com/wlrhnh/p/3495612.html
總結
以上是生活随笔為你收集整理的Android事件处理--读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础之扩展GUI——添加状态栏(
- 下一篇: iOS7 UIKit Dynamics