问题:
Fragment中没有提供监听touch事件的方法。
解决方案:
Activity中能够监听touch事件。
于是在FragmentActivity中写一个接口,MyOnTouchListener,在需要监听touch事件的fragment中实现这个窗口。
在FragmentActivity中实现如下方法(一下代码可以直接复制粘贴到FragmentActivity中):
/**
* 以下的几个方法用来,让fragment能够监听touch事件
*/
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);
}
dispatchTouchEvent 可以监听所有的关于屏幕的行为。。。。。
在Fragment中实现如下代码:
((FragmentActivity) getActivity()).registerMyTouchListener(mTouchListener);
/**
* 接收Activity的Touch回调的对象
* 重写其中的onTouchEvent函数,并进行该Fragment的逻辑处理
*/
private MyTouchListener mTouchListener = new MyTouchListener() {
@Override
public void onTouchEvent(MotionEvent event) {
}
};