在片段之间共享TouchEvent

时间:2012-05-22 20:25:55

标签: android fragment ontouchevent touch-event

我有2个片段,共享屏幕。 在两者中,都有一个正在收听TouchEvents的布局 当我在第一个片段上启动TouchEvent,然后将手指移到第二个片段的顶部时,第一个片段仍然会接收到TouchEvent,而第二个片段仍然没有接收到TouchEvent。 我尝试了不同的选择而没有成功。从活动中处理TouchEvent,然后将其分配给两个片段,这可能是一个解决方案吗? 任何线索都欢迎=)

1 个答案:

答案 0 :(得分: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的坐标)