最近有個需求,當橫向RecyclerView滑動到底部,不能滑動後,此時在拖動RecyclerView,需要顯示底部一個動畫效果,如圖是做好的效果圖:
然後很自然的去自定義RecyclerView。
最後發現在拖動RecyclerView時,需要拖動一段距離後才能顯示我的自定義佈局,感覺半天拖動不出來底部佈局,很卡的樣子。而這個起始的拖動距離差一直是25,隨後我打印了系統最小滾動距離ViewConfiguration.get(context).scaledTouchSlop
是23,感覺冥冥之中有聯繫。
經過猜想發現,應該需要在onInterceptTouchEvent時,對ACTION_MOVE事件的滑動距離進行攔截,將這個距離設置很小就可以了,但是不能太小,否則會影響子View的點擊事件。
override fun onInterceptTouchEvent(e: MotionEvent): Boolean {
when (e.action) {
MotionEvent.ACTION_DOWN -> {
mLastMotionPos = e.rawX
}
MotionEvent.ACTION_MOVE -> {
if (abs(e.rawX - mLastMotionPos) > MIN_TOUCH_SLOP) {
return true
}
}
}
return super.onInterceptTouchEvent(e)
}
然後就很絲滑了。
本來是還有個波紋彈彈彈的效果的,產品不需要就沒做了,但是友商有這個效果。下面是我完成的效果圖:
後期打算把這個波紋的效果加上。