這里我就講解下scrollview的觸摸和滑動順序抄谐,并講解下scrollview的幾個觸摸方法
1淑玫、幾個已知的滑動或者滑動開始結(jié)束的方法:
onScroll:在滾動過程中, 每幀最多調(diào)用一次此函數(shù), 調(diào)用的頻率可以用scrollEventThrottle屬性來控制.
onMomentumScrollEnd:當(dāng)一幀滾動完畢時調(diào)用.
onScrollAnimationEnd :ios上的當(dāng)滾動動畫結(jié)束時調(diào)用.
2质欲、還有其他的一些事件如下逊拍,觸摸事件里面有攜帶event,大家可以再下面的方法里面更改一些view操作就可以打印出來這些event攜帶的信息了
1妓羊、onScrollBeginDrag:一個子view滑動開始拖動開始時觸發(fā)比被,注意和onMomentumScrollBegin的區(qū)別
2色难、onScrollEndDrag:一個子view滾動結(jié)束拖拽時觸發(fā)炕婶,注意和onMomentumScrollEnd的區(qū)別
3、onTouchStart:按下屏幕時觸發(fā)
4莱预、onTouchMove:移動手指時觸發(fā)
5柠掂、onTouchEnd:手指離開屏幕觸摸結(jié)束時觸發(fā)
6、onMomentumScrollBegin:當(dāng)一幀滾動開始時調(diào)用.
7依沮、onMomentumScrollEnd:當(dāng)一幀滾動完畢時調(diào)用.
8涯贞、onStartShouldSetResponder:觸摸開始時是否成為響應(yīng)者
9、onStartShouldSetResponderCapture:防止子視圖在觸摸開始時成為應(yīng)答器
10危喉、onScrollShouldSetResponder:滾動時是否成為響應(yīng)者
11宋渔、onResponderGrant:開始響應(yīng)時觸發(fā)
12、onResponderRelease:手指釋放后辜限,視圖成為響應(yīng)者
13皇拣、onResponderReject:響應(yīng)拒絕
14、onScroll:滾動時觸發(fā)薄嫡,會觸發(fā)多次
3氧急、下面就這些方法的順序做個簡單的介紹:
首先在ios上進行測試,測試的結(jié)果如下:
scrollview-ios
由上圖可以看出執(zhí)行的順序毫深,
首先是按下屏幕時觸發(fā)onTouchStart吩坝,
然后手指移動觸發(fā)onTouchMove,會調(diào)用一次或者多次哑蔫,
如果左右滑動钉寝,滑動開始拖動觸發(fā)onScrollBeginDrag,View開始變化闸迷,View成為響應(yīng)者嵌纲,
然后onScroll … onTouchMove這兩個會觸摸多次,
然后手指離開屏幕觸發(fā)onResponderRelease腥沽,
接著觸摸結(jié)束onTouchEnd
然后是滑動結(jié)束拖拽時觸發(fā)onScrollEndDrag逮走,接著就是一幀滾動的開始onMomentumScrollBegin,它的起始位置和onScrollEndDrag的結(jié)束位置重合巡球;
然后是滾動滾動onScroll言沐,
然后是一幀滾動的結(jié)束onMomentumScrollEnd邓嘹,
最后偶爾還會滾動下onScroll酣栈,這個有時間不出來,我覺得跟有抖動一樣
大家可以自己測試下哦
4汹押、android上的時間分為兩種矿筝,一個是滑動一次,一個是連續(xù)滑動兩次甚至多次棚贾,詳見下圖:
4.1窖维、滑動一次
scrollview-android滑動一次的結(jié)果
大家可以看出和ios的區(qū)別榆综,頁面意識滾動了一頁
少了個觸摸結(jié)束onTouchEnd,onResponderGrant铸史、onResponderRelease鼻疮,這三個(為啥?目前我還不清楚)琳轿,
直接就是觸摸開始-->移動-->開始拖拽-->滾動-->拖拽結(jié)束(手指離開了)-->一幀滾動開始-->滾動-->一幀滾動結(jié)束-->滾動判沟,
如果不滑動,只是點擊離開崭篡,只會觸發(fā)onTouchStart和onTouchEnd挪哄;
4.2、滑動兩次或者多次:
scrollview-android滑動2次的結(jié)果
大家可以看出區(qū)別琉闪,滑動了兩次迹炼,
在拖拽開始onScrollBeginDrag和拖拽結(jié)束onScrollEndDrag之間沒有了滾動onScroll;
然后一幀滾動的開始onMomentumScrollBegin颠毙;
然后竟然出發(fā)了開始收拾操作的方法onResponderGrant斯入;
再次觸發(fā)觸摸開始:onTouchStart;
然后再一次的拖拽開始onScrollBeginDrag和拖拽結(jié)束onScrollEndDrag蛀蜜,中間有了onscroll咱扣,可能是滾動變慢了,手指離開了涵防,就有了onScroll闹伪;
最后是一幀滾動的結(jié)束onMomentumScrollEnd,
這里沒有onScroll壮池。
這里的view是滾動了兩頁也就是從1-2偏瓤,然后從2-3,最后停在了第三頁椰憋,也就是一幀開始和結(jié)束之間可能存在2-3次的滑動厅克,也就是可能會出現(xiàn)view切換了2-3頁面,根據(jù)你的滑動的速度和手機的處理能力了橙依。
5证舟、至于FB為何如何設(shè)計,我就不得而知了窗骑,還希望知道的同學(xué)能夠分享下女责。
代碼如下:
感興趣的同學(xué)可以自行寫一遍代碼哦:
scrollview-1
scrollview-2
scrollview-3
scrollview-4