当前位置: 首页> 科技> 名企 > 郑州手机网站设计_深圳装修公司口碑排行_株洲网络推广_seo教程技术整站优化

郑州手机网站设计_深圳装修公司口碑排行_株洲网络推广_seo教程技术整站优化

时间:2025/7/11 15:31:37来源:https://blog.csdn.net/as425017946/article/details/142654668 浏览次数:2次
郑州手机网站设计_深圳装修公司口碑排行_株洲网络推广_seo教程技术整站优化

重写SwipeRefreshLayout的onIntercept方法就可以很简单的解决了。

思路:

  1. 因为下拉刷新,只有纵向滑动的时候才有效,那么我们就判断此时是纵向滑动还是横向滑动就可以了。
  2. 纵向滑动就拦截事件,横向滑动不拦截。
  3. 怎么判断是纵向滑动还是横向滑动,只要判断Y轴的移动距离大于X轴的移动距离那么就判定为纵向滑动就行了。

以下就是重写后的SwipeRefreshLayout,直接复制到项目就可以使用了。


public class VpSwipeRefreshLayout extends SwipeRefreshLayout {private float startY;private float startX;// 记录viewPager是否拖拽的标记private boolean mIsVpDragger;private final int mTouchSlop;public VpSwipeRefreshLayout(Context context, AttributeSet attrs) {super(context, attrs);mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {int action = ev.getAction();switch (action) {case MotionEvent.ACTION_DOWN:// 记录手指按下的位置startY = ev.getY();startX = ev.getX();// 初始化标记mIsVpDragger = false;break;case MotionEvent.ACTION_MOVE:// 如果viewpager正在拖拽中,那么不拦截它的事件,直接return false;if(mIsVpDragger) {return false;}// 获取当前手指位置float endY = ev.getY();float endX = ev.getX();float distanceX = Math.abs(endX - startX);float distanceY = Math.abs(endY - startY);// 如果X轴位移大于Y轴位移,那么将事件交给viewPager处理。if(distanceX > mTouchSlop && distanceX > distanceY) {mIsVpDragger = true;return false;}break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:// 初始化标记mIsVpDragger = false;break;}// 如果是Y轴位移大于X轴,事件交给swipeRefreshLayout处理。return super.onInterceptTouchEvent(ev);}
}

关键字:郑州手机网站设计_深圳装修公司口碑排行_株洲网络推广_seo教程技术整站优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: