如下我想在recycleview里写拦截事件处理scrollview嵌套viewpager嵌套viewpager带来的冲突问题
现在只执行DOWN不执行UP MOVE呢?
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downY = ev.getRawY();
downX = ev.getRawX();
//当传入的参数为true时,表示子组件要自己消费这次事件,告诉父组件不要拦截(抢走)这次的事件
this.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
upY = ev.getRawY();
upX = ev.getRawX();
floatY = downY - upY;
floatX = downX - upX;
if (Math.abs(floatX) > 10) {
this.getParent().requestDisallowInterceptTouchEvent(false);
}
//上滑
if (floatY > 0) {
this.addOnScrollListener(new OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//获取可见数目
layoutManager = (LinearLayoutManager) getLayoutManager();
visibleItemCount = layoutManager.getChildCount();
LogUtils.i("可见数目 " + visibleItemCount);
}
});
if (visibleItemCount > 5) {
this.getParent().requestDisallowInterceptTouchEvent(true);
} else {
this.getParent().requestDisallowInterceptTouchEvent(false);
}
}
//下滑
else {
this.addOnScrollListener(new OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//获取recycleview首个item是否可见
layoutManager = (LinearLayoutManager) getLayoutManager();
seeFirstPostion = layoutManager.findFirstCompletelyVisibleItemPosition();
mmPosition = layoutManager.findFirstVisibleItemPosition();
seeLastPosition = layoutManager.findLastCompletelyVisibleItemPosition();
LogUtils.i("可见" + seeFirstPostion + "\n" + mmPosition + "\n" + seeLastPosition);
}
});
//如果第一条不可见
if (seeFirstPostion > 0) {
this.getParent().requestDisallowInterceptTouchEvent(true);
} else {
this.getParent().requestDisallowInterceptTouchEvent(false);
}
}
break;
case MotionEvent.ACTION_UP:
this.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
super.onTouchEvent(ev);
return false;
}