TouchImageView源碼分析,touchimageview源碼

來源:互聯網
上載者:User

TouchImageView源碼分析,touchimageview源碼

TouchImageView源碼分析——請叫我代碼偵探


github上有個不錯得項目,https://github.com/Dreddik/AndroidTouchGallery


主要還是TouchImageView裡面得源碼分析,分析touch事件得傳遞流程


當點擊這個GalleryViewPager裡得TouchImageView的時候,列印出的結果為


down ==0,move==2,up ==1,cancle==3;

從列印分析可以看出,GalleryViewPager的onInerceptTouch攔截了down事件,但是執行了super的onInterceptTouch方法返回預設值false,然後就直接傳遞給了TouchImageView去執行down事件,在這裡ViewPager和其它的ViewGroup的touch事件傳遞不同,因為這裡的子View其實也是一個ViewGroup,也就是說,當ViewPager攔截的touch事件傳遞給這個Viewgroup子view的onTouchEvent事件後,即使子view的on touch事件返回的是false,也不會把touch事件傳遞給GalleryViewPager的ontouchevent處理。這點和一般的view group的touch事件的傳遞不太一樣,具體我也不明白為什麼。它就好像是ViewPager的直接子View的OnTouchEvent事件返回的是true一樣。如下:



ViewPager裡面設定的AdapterView為單個View非ViewGroup時候,touch事件傳遞,down後直接返回給ViewPager的TouchEvent處理,子view預設返回false;



但是當子View的onTouch事件返回的是true的話,不會直接將接下來的move的touch事件傳遞給ViewPager的onTouchEvent事件。而是自己消耗move事件。



ViewPager裡面的onTouchEvent執行的時機是當子ViewGroup的子view,或者直接子view(這個子view的ontouchevent事件返回的是true)的touch事件為Action_cancle時才執行。


而如果是單獨的一個ontouchevent事件返回的是false的非ViewGroup的子view則執行到down後就直接執行ViewPager裡的onTouchEvent方法。


具體原因可以去看android系統源碼

PS:可能這裡分析會有很多問題,希望各位看到問題錯誤多批評指正,歡迎吐槽。


android 的源碼分析 應該怎下手?

如果你水平比較高的話,從哪個模組開始入手都是可以的,但是,如果你水平還比較一般,對代碼不是很熟悉的情況下,個人建議你買本相關書籍,讓書帶著你一起分析比較好!
 
linux源碼分析

linux的tcp-ip棧代碼的詳細分析

1.資料結構(msghdr,sk_buff,socket,sock,proto_ops,proto)

bsd通訊端層,操作的對象是socket,資料存放在msghdr這樣的資料結構:

建立socket需要傳遞family,type,protocol三個參數,建立socket其實就是建立一個socket執行個體,然後建立一個檔案描述符結構,並且互相建立一些關聯,即建立互相串連的指標,並且初始化這些對檔案的寫讀操作映射到socket的read,write函數上來。

同時初始化socket的操作函數(proto_ops結構),如果傳入的type參數是STREAM類型,那麼就初始化為SOCKET->ops為inet_stream_ops,如果是DGRAM類型,則SOCKET-ops為inet_dgram_ops。對於inet_stream_ops其實是一個結構體,包含了stream類型的socket操作的一些入口函數,在這些函數裡主要做的是對socket進行相關的操作,同時通過調用下面提到的sock中的相關操作完成socket到sock層的傳遞。比如在inet_stream_ops裡有個inet_release的操作,這個操作除了釋放socket的類型空間操作外,還通過調用socket串連的sock的close操作,對於stream類型來說,即tcp_close來關閉sock

釋放sock。

建立socket同時還建立sock資料空間,初始化sock,初始化過程主要做的事情是初始化三個隊列,receive_queue(接收到的資料包sk_buff鏈表隊列),send_queue(需要發送資料包的sk_buff鏈表隊列),backlog_queue(主要用於tcp中三向交握成功的那些資料包,自己猜的),根據family、type參數,初始化sock的操作,比如對於family為inet類型的,type為stream類型的,sock->proto初始化為tcp_prot.其中包括stream類型的協議sock操作對應的入口函數。

在一端對socket進行write的過程中,首先會把要write的字串緩衝區整理成msghdr的資料結構形式(參見linux核心2.4版原始碼分析大全),然後調用sock_sendmsg把msghdr的資料傳送至inet層,對於msghdr結構中資料區中的每個資料包,建立sk_buff結構,填充資料,掛至發送隊列。一層層往下層協議傳遞。一下每層協議不再對資料進行拷貝。而是對sk_buff結構進行操作。
參考資料:networking.ctocio.com.cn/tips/91/9385591.shtml
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.