问题:上下滑动和左右滑动冲突问题
解决方案:自定义viewpager,修改viewpager事件拦截机制。
当事件传递到viewpager时候,让他的父布局不要进行事件拦截,而是交给viewpager自己处理。
我们使用requestDisallowInterceptTouchEvent()方法进行设置。
具体操作:
1 自定义viewpager
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewGroup;
public class DecoratorViewPager extends ViewPager {
private ViewGroup parent;
public DecoratorViewPager(Context context) {
super(context);
}
public DecoratorViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setNestedpParent(ViewGroup parent) {
this.parent = parent;
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (parent != null) {
Log.i("dispatch_touch_event","---"+ev.getAction());
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (parent != null) {
Log.i("onintercepte_touch_eve","---"+ev.getAction());
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (parent != null) {
Log.i("on_touch_event","---"+ev.getAction());
parent.requestDisallowInterceptTouchEvent(true);
}
return super.onTouchEvent(ev);
}
}
2 在xml中使用自定义viewpager
<com.demo.widget.DecoratorViewPager
android:id="@+id/rec_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
viewPager = (DecoratorViewPager) findViewById(R.id.rec_viewpager);
viewPager.setAdapter(new myAdapter());
viewPager.setNestedpParent((ViewGroup)viewPager.getParent());
4 如果需要理解以上做法,需要了解android事件拦截基础知识。
如有问题,请联系QQ:972713831