给下拉刷新组件PullToRefresh ListView增加左右滑动手势的识别

使用Android-PullToRefresh这个插件来展示列表

但是想增加左右滑动的手势的识别

目前是这么实现的:

listView = pullToRefreshListView.getRefreshableView();   
listView.setOnTouchListener(new OnTouchListener() {   
    @Override   
    public boolean onTouch(View v, MotionEvent event) {   
        eventConsumed = false;   
        gd.onTouchEvent(event);//里面会修改eventConsumed变量   
        return eventConsumed ? true : false;   
    }   
});

这么做大致上能够达到效果

但有一个问题,就是有一个item会处于按下状态

如何才能更好的达到效果呢?

分析

item会处于按下状态是因为gd.onTouchEvent(event);在左右滑动时会消化掉MotionEvent.ACTION_UP

归根结底

这个活应该同时借助onInterceptTouchEventonTouchEvent去完成

onInterceptTouchEvent如果返回true就能偷走事件,不往下传给item

PullToRefreshListView中把它们设成了final不许修改

所以得做个小手术,将final去掉

然后就可以添加自己的手势支持:

onliners = new PullToRefreshListView(this, getAttributeSet4TagFromXml(R.layout.part_onliners,  
 "com.handmark.pulltorefresh.library.PullToRefreshListView")) {   
    @Override   
    public boolean onInterceptTouchEvent(MotionEvent event) {   
        boolean s = super.onInterceptTouchEvent(event);   
        listViewEventConsumed = false;   
        gd.onTouchEvent(event);   
        return listViewEventConsumed ? listViewEventConsumed : s;   
    }   
    @Override   
    public boolean onTouchEvent(MotionEvent event) {   
        boolean s = super.onTouchEvent(event);   
        return listViewEventConsumed ? false : s;   
    }   
};

这样在左右滑动被截获时事件不会进一步传到item

也就不会出于按下状态。