需求:界面由兩部分組成,頂部一個圖片,圖片下面是列表。在列表滑動時,圖片跟著滑動。并且列表要類似ViewPager,一次滑動一個item。
實現(xiàn):CoordinatorLayout [ AppBarLayout [ ImageView ] , RecyclerView ]。其中 RecyclerView 使用 PagerSnapHelper。
結果:快速的劃一下,AppBarLayout 剛開始跟著一起滑動。當觸發(fā) RecyclerView 的 Fling 時,AppBarLayout 不動了,沒有按預期的繼續(xù)滑動。
原因:PagerSnapHelper 的父類 SnapHelper extends RecyclerView.OnFlingListener,重寫了其中的 onFling 方法,并且 return true。這表示 RecyclerView 自己消費掉了該次的 MotionEvent 事件,onFling 沒能傳遞出去。
解決:寫一個類 MyPagerSnapHelper 繼承 PagerSnapHelper,重寫 onFling 方法,返回 false。用 MyPagerSnapHelper 替換掉原來的。
class MyPagerSnapHelper : PagerSnapHelper() {
override fun onFling(velocityX: Int, velocityY: Int): Boolean {
super.onFling(velocityX, velocityY)
return false
}
}