我有两个片段,共享屏幕。
在两个片段中,都有一个监听TouchEvent的布局。
当我在第一个片段上开始一个TouchEvent,然后在第二个片段上移动手指时,TouchEvent仍然被第一个片段接收,而不是第二个片段。
我尝试了不同的选项但没有成功。处理来自活动的TouchEvent,然后将其分派到两个片段是否是一种解决方法?
欢迎任何线索=)
我有两个片段,共享屏幕。
在两个片段中,都有一个监听TouchEvent的布局。
当我在第一个片段上开始一个TouchEvent,然后在第二个片段上移动手指时,TouchEvent仍然被第一个片段接收,而不是第二个片段。
我尝试了不同的选项但没有成功。处理来自活动的TouchEvent,然后将其分派到两个片段是否是一种解决方法?
欢迎任何线索=)
好的!以下是我如何管理的(非常基础):
MyActivity.java:
private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MusicShaker.MyOnTouchListener>(10);
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
listener.onTouch(ev);
}
return super.dispatchTouchEvent(ev);
}
public void registerMyOnTouchListener(MyOnTouchListener listener){
onTouchListeners.add(listener);
}
public interface MyOnTouchListener {
public void onTouch(MotionEvent ev);
}
Fragment1.java:
((MyActivity)getActivity()).registerMyOnTouchListener(new MyActivity.MyOnTouchListener() {
@Override
public void onTouch(MotionEvent ev) {
Log.d("", "Fragment1 got it");
}
});
Fragment2.java :
((MyActivity)getActivity()).registerMyOnTouchListener(new MyActivity.MyOnTouchListener() {
@Override
public void onTouch(MotionEvent ev) {
Log.d("", "Fragment2 got it");
}
});
这个方法可以使用,但如果有更好的解决方案,欢迎分享 =)
编辑:使用此方法时要小心,因为MotionEvent x和y将与rawX和rawY相同(不再转换为View的坐标)。