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

来源:互联网 发布:大闹宠物进阶数据 编辑:程序博客网 时间:2024/04/20 15:48

解决使用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中使用
这里写图片描述

解决,完毕。

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

2 0