2012-05-22 2 views
3

화면을 공유하는 2 개의 조각이 있습니다. 둘 다 TouchEvents를 수신하는 레이아웃이 있습니다.
첫 번째 조각에서 TouchEvent를 시작한 다음 두 번째 손가락 위에서 손가락을 움직이면 TouchEvent는 첫 번째 조각에서 여전히 수신되고 두 번째 조각에서는 결코 수신되지 않습니다.
나는 여러 가지 옵션을 시도했지만 성공하지 못했습니다. 그것은 액티비티의 TouchEvent를 처리하고 두 조각 모두에 디스패치하는 솔루션 일 수 있습니까?
모든 단서 환영 =)조각간에 TouchEvent 공유

+0

TouchEvent를 가로 채기 위해 어떤 방법을 사용하고 있습니까? 터치 이벤트를 가로 챌 때 무엇을 반환합니까? false를 반환하여 onInterceptTouchEvent를 사용하여 원하는 동작을 얻을 수 있다는 것을 알았지 만 이는 뷰간에 발생합니다. 파편이있는 생각이 없습니다. –

답변

3

OK!

((MyActivity)getActivity()).registerMyOnTouchListener(new MyActivity.MyOnTouchListener() { 

     @Override 
     public void onTouch(MotionEvent ev) { 
      Log.d("", "Fragment2 got it"); 
     } 
    }); 

그것은 작동하지만 :
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 여기에 내가 있음을 관리하는 방법 (매우 기본적으로)입니다 사람이 더 나은 솔루션이있는 경우, 나는 항상

EDI) = 듣고있어 t : MotionEvent x 및 y가 rawX 및 rawY (더 이상 View의 좌표로 변환되지 않음)와 동일하므로이 솔루션을 사용할 때는주의하십시오.

관련 문제