PullToRefreshScrollView嵌套SwipeMenuListView冲突问题解决

Posted 鲸歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PullToRefreshScrollView嵌套SwipeMenuListView冲突问题解决相关的知识,希望对你有一定的参考价值。

参考: 

http://blog.csdn.net/u012255016/article/details/46048797

 

public class NoScrollSwipeMenuListView extends SwipeMenuListView {
    private GestureDetector mGestureDetector;
    View.OnTouchListener mGestureListener;

    public NoScrollSwipeMenuListView(Context context) {
        super(context);
        mGestureDetector = new GestureDetector(context, onGestureListener);
    }

    public NoScrollSwipeMenuListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mGestureDetector = new GestureDetector(context, onGestureListener);
    }

    public NoScrollSwipeMenuListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mGestureDetector = new GestureDetector(context, onGestureListener);
    }

    private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener() {

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            if (Math.abs(distanceY) >= Math.abs(distanceX)) {
                return true;
            }
            // 当手指触到listview的时候,让父ScrollView交出ontouch权限,也就是让父scrollview 停住不能滚动
            setParentScrollAble(false);
            return false;
        }
    };

    /**
     * 是否把滚动事件交给父scrollview
     * 
     * @param flag
     */
    private void setParentScrollAble(boolean flag) {
        // 这里的parentScrollView就是listview外面的那个scrollview
        getParent().requestDisallowInterceptTouchEvent(!flag);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        mGestureDetector.onTouchEvent(ev);
        return super.onTouchEvent(ev);
    }

    /*
     * 
     * 重写该方法,达到使ListView适应ScrollView的效果
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

 

以上是关于PullToRefreshScrollView嵌套SwipeMenuListView冲突问题解决的主要内容,如果未能解决你的问题,请参考以下文章

使用开源的PullToRefreshScrollView scrollTo和scrollby遇到的问题

PullToRefreshScrollView的上拉加载下拉刷新

PullToRefreshScrollView刷新图标和字体的设定

android 下拉刷新框架PullToRefreshScrollView(com.handmark.pulltorefresh)

PullToRefreshScrollView实现顶层搜索框 滑动可隐藏 下面刷自定义GridView

Android下拉刷新控件--PullToRefresh的简单使用