Android 關於 OnScrollListener 事件順序次數的簡要分析
在 Android 的 OnScrollListener 整個事件我主要分析下他的執行順序:
實現滾動事件的監聽接口
new AbsListView.OnScrollListener(){ @Override public void onScrollStateChanged(AbsListView absListView, int scrollState) { switch (scrollState) { case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: // 手指觸屏拉動準備滾動,隻觸發一次 順序: 2 break; case AbsListView.OnScrollListener.SCROLL_STATE_FLING: // 持續滾動開始,隻觸發一次 順序: 4 break; case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: // 整個滾動事件結束,隻觸發一次 順序: 6 break; default: break; } } @Override public void onScroll(AbsListView absListView, int i, int i1, int i2) { // 一直在滾動中,多次觸發 順序: 1、3、5 } }
之前一直很迷煳,後來仔細測試後得出上麵的結論
另外對於 ListView 圖片列表的滾動,應該在
SCROLL_STATE_FLING 時讓圖片不顯示,提高滾動性能讓滾動小姑更平滑
SCROLL_STATE_IDLE 時顯示當前屏幕可見的圖片
對於 onScroll() 接口方法基本上不用他
之前看文檔上的說法,用穀歌翻譯出來以為 onScroll 方法是滾動完成後的回調,結果實測是滾動執行中的回調,列表稍滾動一段就要觸發幾十次
https://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html
不知是文檔沒描述對,還是翻譯不準確,看他語態過去完成時應該是描述錯了吧,感覺應該是 scrolling 才對
-----------------------------------------------------------------------------------------------------------------------
補充:
之前的順序測試還不夠細致,今天偶然測試間發現問題:
1. 當手指隻輕觸屏幕不拉動隻會觸發一次 onScroll 方法,不會觸發其他滾動事件
2. 如果手指觸碰屏幕後停滯一下再滑動則首先執行一次 onScroll 方法 然後才是 SCROLL_STATE_TOUCH_SCROLL 事件
3. 如果手指碰到屏幕後直接滑動則第一次就執行 SCROLL_STATE_TOUCH_SCROLL 事件
3. 觸發 SCROLL_STATE_TOUCH_SCROLL 事件後還會繼續多次觸發 onScroll 事件,而不是直接觸發 SCROLL_STATE_FLING 事件
4. 滾動後 不一定 會觸發 SCROLL_STATE_FLING 事件,可能和手指滑動的距離有關係
5. 滾動的過程中會多次調用 onScroll 方法
6. 除了 onScroll 觸發多次,其他事件在整個過程中隻會觸發一次
最後更新:2017-04-03 12:55:06