2013-07-12 2 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

Рассмотрите возможность использования dispatchTouchEvent вместо onInterceptTouchEvent. Я столкнулся с некоторыми проблемами, поскольку на некоторых устройствах (точнее, на Samsung) это может работать не так, как ожидалось. И диспетчеризация действительно проще.

Идея заключается в том, что вы переопределите dispatchTouchEvent, вызовите супер и обработайте события вашего движения. Вот пример:

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

    return super.dispatchTouchEvent(ev); //child's onTouchListener will be triggered 
} 
Смежные вопросы