編輯:關於Android編程
一個好的應用與用戶的體驗分不開,用戶體驗好就是對事件的處理適當.要處理好Android事件處理,就必須了解Android中事件的傳遞過程.下面是我對Andorid事件的理解,如果有不對地方,請給我指出來!
Android頁面由2個元素組成,一個是Activity,另一個是View.而事件產生於頁面,所以來了解一下事件是怎麼樣在View與Activity中傳遞的.
事件首先由系統傳遞到View,如果View不處理再傳遞到Activity,而Activity中接收的方法是onTouchEvent(MotionEvent ev); 在View中涉及三個方與事件傳遞 dispatchTouchEvent(MotionEvent ev); 對事件進行分發onInterceptTouchEvent(MotionEvent ev);對事件進行攔截onTouchEvent(MotionEvent ev);對事件進行處理 那麼事件是怎麼在View中傳遞的呢?注意:
dispitch是事件分發,返回true,則表示事件已經分發,false表明不分發事件.intercept是事件的攔截,返回true,表示事件已經攔截,false表明不攔截事件,事件繼續向下傳onTouch是事件的處理,返回true,表示事件已經處理,等待事件的後續action,返回false,表示不處理事件,事件繼續傳遞.一旦事件到o點,則事件的後續動作(action)直接進入到12車道,因此我將12道稱作為快車道.事件產生時,系統經過1路徑進入到View,因此路徑1是出發站.
事件經過1到達a_a,如果a_a直接(不調用super.dispatchTouchEvent)返回true,則表示事件已經分發,但是並沒有真正分發下去,只是a_a自己處理了,所有後繼的所有事件都只到達a_a.a如果a_a直接返回false,表示事件不分發,此是事件進入到15道,此時事件到達了o點,後續事件進入會進入12道.如果不是直接返回false,則會進入到車道2,這是正常的事件處理過程.因此a_a點一定要調用super.dispatchTouchEvent進行事件的真正的分發.事件到達a_b後,是詢問對事件是否進行攔截.如果返回true,表示要進行攔截,進入到車道3到達a_c.在a_c不進入到o點情況下,此時後繼事件進入到了車道13,a_b點返回false,表示不攔截事件.則進入到車道5到達b_a點.b_a點返回false,表示不攔截事件,則進入到14道到達a_c點.後續的事件就會進入到13車道直接到達a_c點.返回直接返回true,則所有事件都會在這裡,所有action都會走1-2-3-5路.調用了super.dispatchTouchEvent返回true,則會進入6道到達b_b點.到達b_b後,如果返回true,則進行攔截,進入到7道到達b_c.b_c返回false,到達a_c,如果a_c返回true後續事件進入到13道.返回false事件進入11到達o點,後續事件進入12道.b_c返回true,表示事件已經被處理掉了,此時後續事件進入到了1-2-3-5-15道.不會進入到b_b點.b_b返回false,則進入8道到達c_c點.c_c點返回true,則事件被處理掉,後續事件會進入到1-2-3-5-6-8返回true,則進入到9道到達b_c點.b_c返回true,則後續事件進入到1-2-35-15到達b_c點.否則返回到a_c點,a_c點返回true,後續事件會進入到1-13到達a_c點.如果a_c點返回false,則進入到o點,此後事件會進行12車道.1 背景在Android中任何耗時的操作都不能放在UI主線程中,所以耗時的操作都需要使用異步實現。同樣的,在ContentProvider中也可能存在耗時操作,這時也該使
想必大家都用過QQ的白板功能,裡面主要有兩項,一個是塗鴉功能,其實類似於上節的畫板功能,而另一個就是手寫,那記事本怎麼能沒有這個功能呢,今天就來為我們的記事本添加手寫功能
我們已經有文章向你描述如何使用<include />標簽來重用和共享你的布局代碼。這篇文章將向你闡述<merge />標簽的使用以及如何與<
讓開發的app自動去跑 測試 流程 ,是不是很酷那麼通過操作屏幕自動生成 測試流程代碼 是不是更酷接下來 我們借助Android Studio 2.2 來實現 簡單的自動