给下拉刷新组件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
归根结底
这个活应该同时借助onInterceptTouchEvent
和onTouchEvent
去完成
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
也就不会出于按下状态。