工作产品中有一个功能是viewpager中嵌套着recylerview,recylerview是横向滑动的,因此造成一个现象就是当滑动recylerview的时候,可能会造成viewpager的滑动,造成十分不好的用户体验。
拿到这个问题的时候,想到的肯定就是事件的分发,思路很简单,当点击到recylerview的时候,则确定将事件消费掉,同时告诉父控件(也就是viewPager),不要消费这个事件了,完全有recyleview来处理就好了。ok,思路有了就代码实现了,其实只需要重写一下dispatchTouchEvent这个方法就好了。
public class MyRecyclerView extends RecyclerView {
public MyRecyclerView(Context context) {
super(context);
}
public MyRecyclerView(Context context, @Nullable AttributeSet attrs)
{
super(context, attrs);
}
public MyRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
//解决recyclerView和viewPager的滑动影响
//当滑动recyclerView时,告知父控件不要拦截事件,交给子view处理
getParent().requestDisallowInterceptTouchEvent(true);
return super.dispatchTouchEvent(ev);
}
}
网友评论