解决ViewPager和SlidingPaneLayout的滑动事件冲突问题
问题描述:
ViewPager和SlidingPaneLayout的滑动事件冲突。
问题分析:
在手指左右滑动时,SlidingPaneLayout会屏蔽ViewPager的滑动事件。
解决办法:
自定义SlidingPaneLayout类
importandroid.content.Context;
importandroid.support.v4.view.MotionEventCompat;
importandroid.support.v4.widget.SlidingPaneLayout;
importandroid.util.AttributeSet;
importandroid.view.MotionEvent;
importandroid.view.ViewConfiguration;
publicclassPagerEnabledSlidingPaneLayoutextendsSlidingPaneLayout{
privatefloatmInitialMotionX;
privatefloatmInitialMotionY;
privatefloatmEdgeSlop;
publicPagerEnabledSlidingPaneLayout(Contextcontext){
this(context,null);
}
publicPagerEnabledSlidingPaneLayout(Contextcontext,
AttributeSetattrs){
this(context,attrs,0);
}
publicPagerEnabledSlidingPaneLayout(Contextcontext,
AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);
ViewConfigurationconfig=ViewConfiguration.get(context);
mEdgeSlop=config.getScaledEdgeSlop();
}
@Override
publicbooleanonInterceptTouchEvent(MotionEventev){
switch(MotionEventCompat.getActionMasked(ev)){
caseMotionEvent.ACTION_DOWN:{
mInitialMotionX=ev.getX();
mInitialMotionY=ev.getY();
break;
}
caseMotionEvent.ACTION_MOVE:{
finalfloatx=ev.getX();
finalfloaty=ev.getY();
if(mInitialMotionX>mEdgeSlop&&!isOpen()&&canScroll(this,false,
Math.round(x-mInitialMotionX),Math.round(x),Math.round(y))){
MotionEventcancelEvent=MotionEvent.obtain(ev);
cancelEvent.setAction(MotionEvent.ACTION_CANCEL);
returnsuper.onInterceptTouchEvent(cancelEvent);
}
}
}
returnsuper.onInterceptTouchEvent(ev);
}
}
以上这篇解决ViewPager和SlidingPaneLayout的滑动事件冲突问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。