3

画面を共有する 2 つのフラグメントがあります。どちらにも、TouchEvents をリッスンするレイアウトがあります。
最初のフラグメントで TouchEvent を開始し、2 番目のフラグメントの上に指を移動すると、TouchEvent は最初のフラグメントで受信され、2 番目のフラグメントでは受信されません。
成功せずにさまざまなオプションを試しました。アクティビティから TouchEvent を処理し、それを両方のフラグメントにディスパッチするのは解決策でしょうか?
手がかりは大歓迎です=)

4

1 に答える 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と同じになるため、このソリューションの使用には注意してください(ビューの座標に変換されなくなります)

于 2012-05-23T19:26:28.773 に答える