VerticalGridView是什么?
VerticalGridView是安卓leanback库的列表组件,用于支持使用遥控器(按键事件)浏览列表。
它与RecyclerView的继承关系是:VerticalGridView→BaseGridView→RecyclerView
首先我想吐槽一下leanback的BaseGridView相关组件,耦合度较高,并且不允许开发者替换其LayoutManager,且该GridLayoutManager是final修饰,不允许继承。
这样出了bug都没法给他改。
异常现象
如图所示的VerticalGridView中,使用手指触屏滑动时,会出现滑出一定距离就被重置回起点的问题,永远无法滑动到界面底部。
原因
起初是怀疑和布局刷新有关,因为在bindView中不给ImageView设置图片就没有该问题了。
后来看了下GridLayoutManager的代码,log日志打开后发现,每当触控下滑到一定距离,就会触发onLayoutChildren()方法,在这个方法中,会调用focusToViewInLayout()方法,该方法是用于,当用户使用遥控器上下左右移动焦点时,将VerticalGridView滚动至以焦点View为中心的位置。
这个逻辑在使用遥控器时是没有问题的,是需要的,但是在进行触摸事件时