Jndroid發佈0.9.0版本,拓展網頁交互能力

Jndroid今日發佈0.9.0版本,此版本較之上個版本最大的改進在於引入了Android事件處理流程,實現了MotionEvent一整套分發體系。這套體系拓展了傳統前端的事件處理能力,從而能夠實現許多隻有在客戶端上才能實現的交互方式。前端

以下圖中的例子,藍色矩形爲屏幕範圍。屏幕中爲一個Gallery,Gallery有3屏,能夠左右滑動。Gallery的中屏是一個ScrollView,其中有若干ScrollView Item。ScrollView能夠上下滑動,ScrollView Item能夠點擊。瀏覽器

圖片描述

這種交互在客戶端中很是廣泛,好比微信,好比各大瀏覽器,都是使用這種交互。然而在前端應用中,這種交互卻很是罕見,主要的緣由就在於傳統前端事件處理方式沒法處理這種復瑣事件邏輯,具體說來,緣由有二:微信

其一,前端中的事件處理過程是流式的,事件依次下發,依次冒泡。若是視圖樹中的節點對於事件處理的依賴是單向的,則這種流式的事件處理方式徹底能夠勝任。可是,若是依賴關係成環,(就Gallery而言,Gallery的子節點可能包含另一個Gallery,那麼,Gallery中的子節點是否可以接收到事件取決與Gallery是否予以分發,同時,Gallery自身是否應該處理事件又取決於子節點是否須要事件),則流式的處理方式則沒法勝任。app

其二,前端中的手勢是集中判斷的方式。如上例,當事件產生時,這些事件應爲什麼種手勢,是橫向滑動,是豎向滑動,抑或是點擊,則依賴於瀏覽器內核的判斷。若是視圖樹很複雜,事件又很複雜,複雜度太高時,則瀏覽器內核沒法周全,同時不一樣瀏覽器內核處理沒法保證相同,便會產生各類問題。spa

爲此,Jndroid中引入Android事件處理方式,能夠解決上述兩個問題。Jndroid中事件在下發與冒泡外,還加入了onInterceptTouchEvent方法,從而能夠處理事件的環狀依賴關係,同時,Jndroid中手勢的判斷邏輯在各個View中,沒有手勢的集中判斷,所以大大下降了手勢判斷的複雜度。對於Jndroid中手勢的分發流程和方法,固然一樣也是Android事件分發流程,簡要說明以下:事件

dispatchTouchEvent
向子節點分發事件。在此方法中,首先調用本身的onInterceptTouchEvent,若是不須要攔截,則利用ACTION_DOWN事件對子節點進行探查,找到須要接收事件的子節點並向其分發事件,若是沒有找到,則調用本身的onTouchEvent方法。圖片

onInterceptTouchEvent
預先對事件進行分析和處理,返回true,則事件不向子節點進行分發,返回false,則能夠向子節點進行事件分發。以Gallery爲例,Gallery在滑動過程當中,返回值爲true,而在靜止時,返回值爲false。io

onTouchEvent
View自身對事件的處理。如Gallery中對滑動的處理。class

requestDisallowInterceptTouchEvent
若是設置爲true,其通知父節點和祖先節點皆不能攔截其事件。例如Gallery的onInterceptTouchEvent方法中會調用此方法,這樣,兩層Gallery嵌套時,滑動子Gallery時父Gallery就能夠保持不動。效率

至此,一整套事件的處理體系就創建起來了,這套體系較之傳統的內核事件處理體系具備更強的處理能力,同時兼容性更好,效率也更高,咱們也所以能夠利用Jndroid作出如微信這般交互的前端頁面來,讓Webapp擁有更普遍的應用空間。

相關文章
相關標籤/搜索