0

フリングを実装しようとしています。問題は、X がオフセット 0 (画面の端) にある場合にのみ取得することです。画面の真ん中でフリングしようとしても何も起こりません。これは X でのみ発生します。Y は正常に動作します。コードは次のとおりです。

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    try {

        if ((e1.getY() < CARD_POSITION) && (e2.getY() < CARD_POSITION)
                && (Math.abs(e1.getX() - e2.getX()) >SWIPE_MIN_DISTANCE )
                ) {
            Log.v("Fling:",Double.toString(e1.getX())); 
            return true;
        } else {


            return false;
        }
    } catch (Exception e) {
        return false;
    }

}
4

1 に答える 1

0

私は過去に同様の問題に遭遇しました。x loction を使用していた最小距離しきい値と比較する方法の計算でエラーが発生しました。投稿されたコードと組み合わせて説明していることに基づいて、絶対値を適用した後、x1とx2の違いがあなたの考えに出ていないため、x方向のフリングが機能していないように聞こえます。

オフセット 0 から画面全体をスワイプすると、指を登録できます。これだけの距離があると、2 つの値の差がしきい値をトリガーするのに十分だからです。しかし、画面の中央から x1 = 400 と x2 = 移動イベントが登録されている場所を言うと、そのしきい値をトリガーしていません。

私にとってうまくいったのは、絶対値を削除することでした

public boolean onFling(MovtionEvent e1, MotionEvent e2, float velocityX, float velocityY){

if(e2.getX() - e1.getX() > MIN_SWIPE_DISTANCE && Math.abs(velocityX)){
    Log.d("Swipe", "Left to right")
    return true;
} else if (e2.getX() - e1.getX() > MIN_SWIPE_DISTANCE && Math.abs(velocityX)){
    Log.d("Swipe", "Right to Left")
    return true;
}

私の推論は、e1 と e2 が表すものを説明するGestureDetectorドキュメントに基づいていました。

e1 スクロールを開始した最初のダウン モーション イベント。
e2 現在の onFling をトリガーした移動モーション イベント。

エラーは、e1 の初期値がe2の初期値ACTION_DOWNに対して相対的に発生したという仮定であることが判明しました。ACTION_MOVE

于 2013-05-24T15:16:09.707 に答える