2013-07-12 5 views
1

두 개의보기가 있습니다. 하위보기와 상위보기 (하위보기는 상위보기의 일부 임); 각 뷰에는 고유 한 onTouchListener가 있습니다. 각보기 자체 onInterceptTouchEvent 처리 할 싶습니다. 지금; 그러나 자식보기의 onTouchListener는 이벤트를 수신하지 않습니다. 그것들은 모두 부모보기의 청취자에게 전송됩니다. 하위 뷰가 자체 이벤트를 수신하도록하려면 어떻게해야합니까?여러 번 모션 이벤트 처리

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    //Log.d(TAG, "onInterceptTouchEvent " + ev); 
    // handle child events 
    // note: if you horizontally fling over button its onClick() is not performed 


     MotionEvent ss = MotionEvent.obtain(ev); 
     globalVariabels.currentGallery.onTouchEvent(ss); 
     int bounds[] = {0,0}; 
     globalVariabels.currentGallery.getLocationOnScreen(bounds); 
     int height = globalVariabels.currentGallery.getHeight() + bounds[0]; 
     int width = globalVariabels.currentGallery.getWidth() + bounds[1]; 
     TouchDelegate delegate = new TouchDelegate(new Rect(0, 0, 2000, 2000), globalVariabels.currentGallery); 
     setTouchDelegate(delegate); 
     switch (ev.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
       mIgnore = false; 
       Log.e("ooo", "oo"); 
       Log.e("X:","" + ev.getX()); 
       Log.e("Y:","" + ev.getY()); 
       mNeedToRebase = true; 
       mInitialX = ev.getX(); 
       mInitialY = ev.getY(); 
       return false ; 
      } 

      case MotionEvent.ACTION_MOVE: { 
       if (!mIgnore) { 
        Log.e("22", "22"); 
        float deltaX = Math.abs(ev.getX() - mInitialX); 
        float deltaY = Math.abs(ev.getY() - mInitialY); 
        mIgnore = deltaX < deltaY; 
        super.onInterceptTouchEvent(ev); 
        return !mIgnore; 
       } 
       return false; 
      } 
      default: { 
       return super.onInterceptTouchEvent(ev); 
      } 
     } 
    } 
+0

... 귀하의 문제는 ...? – pskink

+0

이벤트는 자식을 슬라이드하려고 할 때 부모가 처리합니다. – user2357536

+0

내 대답보기 : http://stackoverflow.com/questions/16979285/how-to-dispatch-touch-events-to-children-after-consuming – pskink

답변

0

onInterceptTouchEvent 대신 dispatchTouchEvent을 사용하는 것을 고려하십시오. 필자는 일부 장치 (삼성에서보다 정확하게)가 예상대로 작동하지 않을 수 있기 때문에 몇 가지 문제에 직면했습니다. 그리고 파견은 정말 간단합니다.

아이디어는 당신이 dispatchTouchEvent을 무시하고 슈퍼를 호출하고 모션 이벤트를 처리한다는 것입니다. 다음은 그 예입니다 :

@Override 
protected boolean dispatchTouchEvent(MotionEvent ev) { 
    //perform your on-touch behaviour 

    return super.dispatchTouchEvent(ev); //child's onTouchListener will be triggered 
} 
관련 문제