解决使用`SwipeRefreshLayout`下拉刷新和左右滑动事件冲突的问题

###解决使用SwipeRefreshLayout下拉刷新和左右滑动事件冲突的问题

【处理上下冲突,左右冲突】

项目中某个功能从原生修改到加载h5,在h5中有左右滑动的广告图(下图中的A区域),该页还需要保留下拉刷新,使用的是SwipeRefreshLayout, 开发完成后发现手动滑动广告图时会出现卡顿,停滞现象,究其原因,是左右滑动和下拉刷新(垂直)冲突导致,就是SwipeRefreshLayout对于Y轴的处理容差值很小,如果不是水平滑动,很轻易就会触发下拉刷新。

这里写图片描述

为了解决该问题,需要重写SwipeRefreshLayoutonInterceptTouchEvent(MotionEvent ev)事件,在这里面进行处理,当X距离滑动大于某个值时,就认为是左右滑动,不执行下拉刷新操作。


import 包名

import android.content.Context;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;

/**
 * Created by  on 2016/6/13.
 */
public class VerticalSwipeRefreshLayout extends SwipeRefreshLayout {

    private int scaleTouchSlop;
    private float preX;

    public VerticalSwipeRefreshLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

        scaleTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:

                preX = ev.getX();
                break;

            case MotionEvent.ACTION_MOVE:
                float moveX = ev.getX();
                float instanceX = Math.abs(moveX - preX);
                Log.i("refresh...","move: instanceX:" + instanceX + "=(moveX:" + moveX + " - preX:" + preX + ") , scaleTouchSlop:" + scaleTouchSlop);

                // 容差值大概是24,再加上60
                if(instanceX > scaleTouchSlop + 60){
                    return false;
                }
                break;
        }
        return super.onInterceptTouchEvent(ev);
    }
}


在layout中使用
这里写图片描述

解决,完毕。

【扫描二维码查看】
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值