中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Androd處理屏幕滑動的一些記錄

發布時間:2020-07-17 19:43:30 來源:網絡 閱讀:589 作者:sinmo 欄目:開發技術

參考的一些博客地址:

http://blog.csdn.net/vansbelove/article/details/9013731

http://www.eoeandroid.com/thread-178659-1-1.html

http://www.jb51.net/article/35800.htm


scrollBy(int x, int y):將View偏移(x,y),x控制左右方向的偏移,y控制上下方向的偏移。例如:當x>0,y=0時,向右移動x個像素。當x<0,y=0時,向左移動x個像素。整個View的大小不會發生改變,超出部分會被擋住。

scrollTo(int x, int y):將View移動到(x,y)坐標處。整個View的大小不會發生改變,超出部分會被擋住。

Scroller類:主要用于控制滑動過程,是滑動更平滑,相比scrollTo方法不會顯得突兀。

VellocityTracker類:主要用于計算觸摸速率。用于判斷是快速滑動還是慢滑。


onInterceptTouchEvent(MotionEvent ev):--觸發攔截觸摸事件

    定義于ViewGroup中的一個方法,用于攔截觸摸事件。此方法默認返回false。

onTouchEvent(MotionEvent ev):--觸發觸摸事件

    定義于View中的一個方法,處理傳遞到View的手勢觸摸事件,手勢事件類型包括ACTION_DOWN,ACTION_MOVE,ACTION_UP,ACTION_CANCEL.

    ViewGroup中的onTouchEvent方法默認返回false。

    View中的onTouchEvent方法默認返回true。

當需要處理一些復雜的事件處理時,可能需要根據情況重寫這兩個方法來實現需求。


下面引入EOE里面一篇帖子的分析:

記錄onInterceptTouchEvent和onTouchEvent調用關系,即各種return true和return false的運行情況。

return true和return false,代表的是是否消費完該事件,也就是該事件是否會繼續傳遞給下層或者上層組件繼續處理。return true代表消費完不會繼續傳遞,return false代表沒有消費完將會繼續傳遞。

如果沒有onInterceptTouchEvent,只考慮onTouchEvent的話,比較容易分析和理解。假如有三層布局結構,linearLayout1,linearLayout2,textView,從前到后是包含的關系。那么下面分情況說明。
1.如果它們的onTouchEvent都返回false的話,DOWN事件會自上而下(textView位于最上層)依次傳遞,最終都沒有消費完此事件,都只會進入onTouchEvent方法一次并且MotionEvent的action為MotionEvent.ACTION_DOWN,move和up等事件不會繼續處理。
2.如果textView的onTouchEvent返回true,表示textView消費了此事件,不會傳給父組件linearLayout2和    linearLayout1了,并且還會繼續處理move和up等事件。
3.linearLayout2和linearLayout1的onTouchEvent返回true和上面的情況一樣,都不會繼續傳給父容器而且本身繼續處理move和up等事件。
OK,這種情況還是比較容易理解的。

下面加入onInterceptTouchEvent。
onInterceptTouchEvent只有ViewGroup才會有,用于在進入自身onTouchEvent或者子組件onTouchEvent之前處理事件。注意onTouch是自上而下傳遞,而onInterceptTouch卻是由下而上傳遞的。來了一個DOWN事件,首先進入的必然是最底層的viewGroup的onInterceptTouchEvent方法,然后根據return的值進入自身或者子組件的onTouch事件,當然如果子組件也是viewgroup的話,在進入子組件的onTouch之前也會進入子組件的onInterceptTouchEvent方法。
下面也分幾種情況介紹:
1.當onInterceptTouchEvent返回false時,表示沒有消費完此事件,會繼續傳遞個子組件的onTouch繼續處理。注意這種情況不會就不會傳遞給這個ViewGroup自身的onTouch事件處理了。這和onTouch如果返回false,后續的move、up等事件都不會繼續處理了可以做同樣理解。
2.當onInterceptTouchEvent返回true時,表示消費完此事件,或者說將在此組件上消費該事件。這種情況該事件會傳遞給ViewGroup自身的onTouch事件去處理,而不會傳遞給子組件的onTouch方法了。
由此可以總結,onInterceptTouchEvent返回值只是決定了是要把事件傳遞給自身的onTouch事件還是傳遞給子組件的onTouch事件。返回false表示沒有消費完將傳遞個子組件的onTouch方法,返回true表示自身消費此事件,將傳遞給自身的onTouch方法而不會傳遞給子組件的onTouch方法了。


附件里面是示例參照別人的示例demo,基本就是自己照著敲一遍熟悉熟悉。

附件:http://down.51cto.com/data/2364513
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福泉市| 丹东市| 贵德县| 安溪县| 阿拉尔市| 高雄县| 通江县| 屯留县| 泽普县| 苍南县| 漯河市| 淳化县| 砀山县| 松阳县| 呼伦贝尔市| 隆林| 灵山县| 灵璧县| 开平市| 博白县| 南通市| 凤山市| 常州市| 中江县| 阿拉善盟| 呼伦贝尔市| 四子王旗| 绥中县| 玛多县| 喜德县| 安徽省| 叶城县| 南昌市| 宜兰市| 丹寨县| 手机| 新龙县| 墨江| 卢湾区| 垫江县| 屏东市|