app实现界面的左右手势滑动一般采用的是viewpager或者是Tabhost结合Fragment使用。这里对于使用viewpage的方式就不做赘述(因为viewpage本身是带手势的)。使用手势的时候一般的时候使用GestureDetector 进行监听,但是如果Fragment当中有ListView的时候,ListView会把左右滑动的给吞噬掉,所以直接使用GestureDetector 会不起作用。
为了解决ListView影响手势滑动的问题,我们提供了一个解决的思路:在Fragment的父Activity当中设置一个封装触摸事件的接口,在Fragment当中的Oncreate方法当中实现这个接口,在实现的方法中调用自定义的手势滑动的监听,在监听方法当中就可以实现自己想要实现的结果了。
在父类Activity当中封装的接口:
private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>(
10);
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
listener.onTouch(ev);
}
return super.dispatchTouchEvent(ev);
}
public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.add(myOnTouchListener);
}
public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.remove(myOnTouchListener);
}
public interface MyOnTouchListener {
public boolean onTouch(MotionEvent ev);
}
在Fragment 先创建一个MyOnTouchListener变量myOnTouchListener,在oncreate方法当中:myOnTouchListener=new MainActivity.MyOnTouchListener() {
@Override
public boolean onTouch(MotionEvent ev) {
boolean result = detector.onTouchEvent(ev);
return result;
}
};
((MainActivity)getActivity()).registerMyOnTouchListener(myOnTouchListener);
其中detector为自定义的手势滑动监听器。