概述:
在之前的项目中曾经做过电商分类页面左右两个列表联动的实现,当时的做法是左侧列表使用RecycleView,右侧列表使用的是ScrollView,通过onOverScrolled方法来检测右侧列表是否已经到达了顶部继续下拉还是已经到达了底部继续上滑。这种方式肃然也实现了左右两个列表联动的需求,但是体验上还是有继续优化的空间,之后做了一版优化,左右两个列表都是用recycleview来实现。
实现思路:
左右两个recycleview列表,左侧是简单列表,右侧是复杂布局列表,示例如下图:
- 如果每次有次的列表内容长度都能够超过父view的高度,则这种情况很简单,可以单纯依据canScrollVertically接口与onScrolled接口中返回的dy即可确定当前是已经到达顶部在继续下拉,还是已经到达了底部在继续上滑。
- 如果右侧列表内容长度不能超过父view的高度,则第一点的方法就会失效,无法区分以上描述的两种情况。
这里针对这个问题需要额外的添加一个自定义view来确定手指的滑动方向。
public class TouchCheckView extends RelativeLayout {
private float originY,currentY;
public TouchCheckView(Context context) {
this(context, null);
}
public TouchCheckView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
originY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
currentY = ev.getY();
break;
case MotionEvent.AC