Проблема реализации вертикальной прокрутки в галерее - PullRequest
1 голос
/ 24 февраля 2011

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

Я хочу реализовать вертикальное перелистывание в галерее, и оно у меня работает ... вроде. Я создал подкласс «Галерея», чтобы переопределить методы onFling и onDown.

Вот код, который я использовал для переопределения этих методов:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
    if (m_curTouchPos == NO_CURRENT_TOUCH_POS || m_callback == null)
        return super.onFling(e1, e2, velocityX, velocityY);

    float e1x = e1.getX();
    float e1y = e1.getY();
    float e2x = e2.getX();
    float e2y = e2.getY();

    float offPath = Math.abs(e1x - e2x);
    float distance = Math.abs(e1y - e2y);

    if (offPath < s_swipeMaxOffPath && 
        //Math.abs(velocityY) >= s_swipeMinVelocity && 
        distance >= s_swipeMinDistance)
    {
        if (e1y > e2y)
        {
            m_callback.onSwipeUp(m_curTouchPos);
            //return true;
        }
        else if (e2y > e1y)
        {
            //TODO: IMPLEMENT THIS
            //m_callback.onSwipeDown(m_curTouchPos);
            //return true;
        }
    }

    m_curTouchPos = NO_CURRENT_TOUCH_POS;
    return super.onFling(e1, e2, velocityX, velocityY);
}

@Override
public boolean onDown(MotionEvent eve)
{
    m_curTouchPos = pointToPosition((int)eve.getX(), (int)eve.getY());
    return super.onDown(eve);
}

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

Горизонтальные пролистывания всегда попадают в метод onFling.

Есть идеи, как заставить это работать?

1 Ответ

0 голосов
/ 01 марта 2011

Хорошо, я нашел ответ ... Метод onDown () должен возвращать true. Вызов return super.onDown (eve) приводил к сбою, потому что реализация по умолчанию возвращает false.

Я нашел ответ в другом посте здесь, на StackOverflow:

Android: GestureDetector не работает (жестDetector.onTouchEvent (событие) всегда false) с вкладками (TabActivity, Tabwidget)

...