Android - GridView - GestureDetector не работает - PullRequest
3 голосов
/ 28 февраля 2012

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

Я реализовал 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 - нет абсолютно никакой реакции.Я буквально понятия не имею, что с этим делать, поэтому спасибо за любую помощь заранее.

Ответы [ 3 ]

2 голосов
/ 28 февраля 2012

Возвращаете ли вы 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;
}
1 голос
/ 05 марта 2012

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

1 голос
/ 28 февраля 2012

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

...