1

Android 開発者グループで同様の質問をしましたが、まだ回答が得られていないため、ここで運試しをしようと考えました。

ギャラリーに垂直スワイプを実装したいのですが、動作しています...ちょっと。onFling メソッドと onDown メソッドをオーバーライドできるように、Gallery をサブクラス化しました。

これらのメソッドをオーバーライドするために使用したコードは次のとおりです。

@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 メソッドに入ります。

これを機能させる方法についてのアイデアはありますか?

4

1 に答える 1

0

わかりました、答えが見つかりました... onDown() メソッドは true を返す必要があります。デフォルトの実装が false を返すため、super.onDown(eve) を返す呼び出しが原因で失敗していました。

StackOverflow の別の投稿で答えを見つけました。

Android: タブ (TabActivity、Tabwidget) で GestureDetector が機能しない (gestureDetector.onTouchEvent(event) は常に false)

于 2011-03-01T00:05:48.543 に答える