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的滑动事件冲突解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。