2012-05-22 54 views
3

我有2個片段,共享屏幕。 在兩者中,都有一個正在偵聽TouchEvents的佈局。
當我在第一個片段上啓動TouchEvent,然後將手指移動到第二個片段的頂部時,TouchEvent仍然被第一個接收,而第二個接收不到。
我試過不同的選擇,但沒有成功。它可能是一個解決方案,從該活動處理TouchEvent,然後將其分派到兩個碎片?
歡迎任何線索=)分享片段之間的TouchEvent

+0

您使用什麼方法截取TouchEvent?當你攔截觸摸事件時,你回來了什麼?我知道你可以用onInterceptTouchEvent通過返回false來獲得所需的行爲,但這是在視圖之間。沒有想法與片段 –

回答

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"); 
     } 
    }); 

它的工作原理,但如果有人有更好的解決方案,我總是在聽=)

Edi t:使用此解決方案時要小心,因爲MotionEvent x和y將與rawX和rawY相同(不再轉換爲View的座標)