2012-02-28 2 views
3

У меня проблема с обнаружением жестов fling в моем приложении. Мой макет состоит из GridView, пары TextViews и кнопок.Android - GridView - GestureDetector не работает

Я реализовал OnGestureListener:

public class MyActivity extends Activity implements OnGestureListener{ 
private GestureDetector myGesture ; 

то в OnCreate:

myGesture = new GestureDetector(this); 

и Перегруженные методы:

@Override 
public boolean onTouchEvent(MotionEvent event){ 
    return myGesture.onTouchEvent(event); 
} 

}

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
    // TODO Auto-generated method stub 
    try { 
     if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
      return false; 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //right to left fling 
     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //left to right fling 
     } 
    } catch (Exception e) { 
     // nothing 
    } 
    return false; 
} 

И это действительно отлично работает, но НЕ на GridView. Везде, где вне GridView я выполняю бросок, он работает. На GridView - абсолютно никакой реакции. Я понятия не имею, что с этим делать, поэтому спасибо за любую помощь заранее.

+0

У вашего gridView (или видов внутри) есть onClickListener, который потребляет событие? – ByteMe

+0

Да, ячейки GridView имеют onClickListener – ThunderSS

ответ

1

На самом деле я нашел другое решение, потому что, как я пытался это сделать, это просто не помогло, и никто не знает почему. Вместо этого я использовал GestureOverlayView, и он отлично работает. Просто нужно было добавить два жестов в библиотеку жестов.

+1

привет, пожалуйста, покажите мне пример с GestureOverlayView –

1

Afaik gridview автоматически также добавляет функции ScrollView, и они перехватывают обнаружение жестов. Вам придется реализовать свой собственный GridView, который переопределяет это поведение и добавляет в обнаружение fling. Существует ряд примеров для ScrollView в stackoverflow и других сайтах. Просто сделайте аналогичный подход для GridView.

+0

Спасибо, что ответили так быстро. Я добавил новый класс, который расширяет GridView и меняет все GridViews в моей деятельности на GestureGridView (мой новый класс), однако теперь я получаю ClassCastException: android.widget.Gridview. Я confuseded, не должен ли я изменить все GridViews на GestureGridViews? Тогда ничего не происходит. Буду признателен за каждую помощь. – ThunderSS

+0

Я думаю, что нашел решение ошибки, приведенной выше - я просто не изменил .xml-файл. Однако после того, как я это сделал, у меня появились две новые ошибки: первая - это android.view.InflateException: двоичная строка XML-файла # 44: ошибка раздувания класса pl.flamis.Kalendarz $ GestureGridView, а вторая: java.lang.NoSuchMethodException: GestureGridView (контекст, AttributeSet). Есть идеи? – ThunderSS

+0

Вы, вероятно, не создали конструкторы переопределения. –

2

Вы возвращаете true в своем onFling, когда событие потребляется (например, ниже)?

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
    // TODO Auto-generated method stub 
    try { 
     if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
      return false; 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //right to left fling 
     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //left to right fling 
     } 
     return true; 
    } catch (Exception e) { 
     // nothing 
    } 
    return false; 
} 
+0

Я не на самом деле, но добавление его ничего не изменило. Спасибо за ответ в любом случае! – ThunderSS

Смежные вопросы