• 解决SwipeRefreshLayout左右滑动事件冲突的问题


    在使用SwipeRefreshLayout时我们注意到在SwipeRefreshLayout中左右滑动时可能也会触发下拉刷新的事件,这点让我们很不爽。追其原因是SwipeRefreshLayout对于y轴触摸举例十分明感,没有做太多的容差处理(似乎容差值仅有16),所以如果你不是完全水平的滑动的话就很可能会触发下拉刷新的事件。为了解决这个问题,我们重写了SwipeRefreshLayout的触摸事件,当触摸的X距离大于某个数值的时候,我们就让它认为我们是在左右滑动,不执行下拉刷新操作。

    VerticalSwipeRefreshLayout

    package kale.com.waterfall.extra.swiprefreshlayout;
    
    import android.content.Context;
    import android.support.v4.widget.SwipeRefreshLayout;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.view.ViewConfiguration;
    
    /**
     * @author Jack Tony
     * @brief 只在竖直方向才能下拉刷新的控件
     * @date 2015/4/5
     */
    public class VerticalSwipeRefreshLayout extends SwipeRefreshLayout {
    
        private int mTouchSlop;
        // 上一次触摸时的X坐标
        private float mPrevX;
    
        public VerticalSwipeRefreshLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
    
            // 触发移动事件的最短距离,如果小于这个距离就不触发移动控件
            mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent event) {
    
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    mPrevX = event.getX();
                    break;
    
                case MotionEvent.ACTION_MOVE:
                    final float eventX = event.getX();
                    float xDiff = Math.abs(eventX - mPrevX);
                    // Log.d("refresh" ,"move----" + eventX + "   " + mPrevX + "   " + mTouchSlop);
                    // 增加60的容差,让下拉刷新在竖直滑动时就可以触发
                    if (xDiff > mTouchSlop + 60) {
                        return false;
                    }
            }
    
            return super.onInterceptTouchEvent(event);
        }
    }
  • 相关阅读:
    与客服聊天功能测试点
    京东优惠券如何测试
    Linux笔试题
    线程与线程池原理
    PyCharm 介绍、安装、入门使用
    银行APP测试用户体验性方面
    python的闭包
    列表解析2
    深入函数
    再谈装饰器@@@
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4397537.html
Copyright © 2020-2023  润新知