SwipeRefreshLayout上下刷新与左右滑动事件冲突的处理

来源:互联网 发布:plc编程100例ppt 编辑:程序博客网 时间:2024/04/29 15:40

随着时代的发展,伴随着以京东和淘宝为例的app开发模式,首页使用多数为android与H5的交互页面,所以不免需要做刷新的操作,而有时首页的h5中会出现横向滑动的轮播图之类的,这时就会和我们的下拉刷新事件发生冲突,为了解决这个问题,我们重写了SwipeRefreshLayout的触摸事件,当触摸的X距离大于某个数值的时候,我们就让它认为我们是在左右滑动,不执行下拉刷新操作。

VerticalSwipeRefreshLayout

此处我采用了网上某位大神的代码,直接采用了下,亲测可达到实际效果

参考网址:http://www.cnblogs.com/tianzhijiexian/p/4397537.html
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);    }}
阅读全文
0 0