五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

DEVLOG 9.10 關(guān)于ViewDragHelper的使用小結(jié)

2021-09-11 09:56 作者:房頂上的鋁皮水塔  | 我要投稿

Q:為什么要使用ViewDragHelper?

A: 為了簡化ViewGroup中一些復(fù)雜的拖拽邏輯.


ViewDragHelper中的重要概念

  1. ViewDragHelper.Callback?????

    我們一般通過這個(gè)回調(diào)來控制View在被拖動(dòng)時(shí)的行為。它主要包含這些回調(diào)方法:

2. 使用ViewDragHelper【接管】onInterceptTouchEvent和onTouchEvent方法。

在接管這些方法的時(shí)候,上述回調(diào)中有些方法必須重寫。

接管onInterceptTouchEvent
接管onTouchEvent return true


因?yàn)槲覀兺ǔJ褂肰iewDragHelper的返回值作為onInterceptTouchEvent的返回值,所以我們并不清楚這個(gè)ViewGroup是否真正攔截了事件流??紤]最簡單的情形,如果我們的ViewGroup中只有一個(gè)View。


ViewDragHelper對(duì)于Down事件只做了簡單的處理,對(duì)于MOVE事件,ViewDragHelper會(huì)檢查【滑動(dòng)范圍】。這個(gè)只是做一個(gè)限制性的操作。這個(gè)通過ViewHorizontalDragRange和VerticalDragRange確定。


clampViewPositionHorizontal和Vertical方法確定滑動(dòng)時(shí)的位置。如果只設(shè)置水平滑動(dòng),Vertical返回0。同時(shí)可以檢查當(dāng)前的滑動(dòng)是否到了邊界,如果到了邊界,通過設(shè)置一個(gè)固定值,可以避免出界。

2. 滑動(dòng)邊界

ViewDragHelper可以檢查在邊界位置的滑動(dòng)

這里有很多不同的枚舉,檢查在不同邊緣的滑動(dòng)。


3. onViewReleased
通過這個(gè)回調(diào)可以實(shí)現(xiàn)如微信電話的icon回彈的效果。舉個(gè)例子:

如果超過中點(diǎn)就會(huì)強(qiáng)制回到左邊界或者右邊界,通過settleCapturedViewAt。他的具體實(shí)現(xiàn)使用了Scroller,我們知道使用Scroller就必須要重寫computeScroll,而且使用scroller.startScroll也必須使用View#invalidate。具體的原因我們可以看看:

因?yàn)閂iewDragHelper最終使用了Scroller實(shí)現(xiàn)滑動(dòng),而Scoller本身并不能滑動(dòng),他只是一個(gè)計(jì)算器,根據(jù)時(shí)間的流逝計(jì)算應(yīng)該滑動(dòng)到的位置。真正的滑動(dòng)邏輯是在View調(diào)用invalidate之后,View在繪制過程中會(huì)索取scrollX scrollY,然后做一個(gè)小位移。

我們需要實(shí)現(xiàn)computeScroll,主要是為了判定滑動(dòng)是否到了盡頭。


DEVLOG 9.10 關(guān)于ViewDragHelper的使用小結(jié)的評(píng)論 (共 條)

分享到微博請遵守國家法律
班戈县| 吉林省| 喀什市| 余江县| 蓬安县| 香格里拉县| 平和县| 平舆县| 海口市| 岳普湖县| 和平区| 长兴县| 句容市| 金门县| 清原| 久治县| 榆林市| 中江县| 广水市| 临清市| 江源县| 涞水县| 宜川县| 陕西省| 昌邑市| 闽侯县| 平泉县| 工布江达县| 山丹县| 神农架林区| 休宁县| 天祝| 临沧市| 镇江市| 吉安县| 山西省| 马关县| 阳曲县| 柳河县| 衡阳市| 台东市|