在片段之间共享TouchEvent

3

我有两个片段,共享屏幕。 在两个片段中,都有一个监听TouchEvent的布局。
当我在第一个片段上开始一个TouchEvent,然后在第二个片段上移动手指时,TouchEvent仍然被第一个片段接收,而不是第二个片段。
我尝试了不同的选项但没有成功。处理来自活动的TouchEvent,然后将其分派到两个片段是否是一种解决方法?
欢迎任何线索=)


你使用什么方法来拦截TouchEvent?当你拦截触摸事件时,你返回的是什么?我知道你可以通过返回false在onInterceptTouchEvent中获得所需的行为,但那只适用于视图之间。对于片段,我不知道该怎么做。 - James Coote
1个回答

3

好的!以下是我如何管理的(非常基础):

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的坐标)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接