需求:界面由两部分组成,顶部一个图片,图片下面是列表。在列表滑动时,图片跟着滑动。并且列表要类似ViewPager,一次滑动一个item。
实现:CoordinatorLayout [ AppBarLayout [ ImageView ] , RecyclerView ]。其中 RecyclerView 使用 PagerSnapHelper。
结果:快速的划一下,AppBarLayout 刚开始跟着一起滑动。当触发 RecyclerView 的 Fling 时,AppBarLayout 不动了,没有按预期的继续滑动。
原因: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
}
}