2

ユーザーが水平スワイプを使用してさまざまな画面をナビゲートできるアプリを構築していますが、これらの画面には垂直スクロールビューも含まれています。垂直スクロールが100%垂直でない場合、Androidは垂直スクロールを水平スワイプとして検出するようです(それが理にかなっていることを願っています)。

垂直スワイプを無効にするか、水平検出の感度を下げる方法はありますか?

onFling クラス内のコードは、現時点では非常に基本的なものです。

    public boolean onFling(MotionEvent start, MotionEvent finish, float velocityX,
                float velocityY) {
     //Right Swipe
     if (finish.getRawX() < start.getRawX()) {
        Toast.makeText(getApplicationContext(), "Showing Listings For : "+date.getDate(),Toast.LENGTH_SHORT).show();
      }

     if (start.getRawX() < finish.getRawX()) {
        Toast.makeText(getApplicationContext(), "Showing Listings For : "+date.getDate(),Toast.LENGTH_SHORT).show();
      }
    }

- アップデート -

さて、スワイプの開始点と終了点の間の垂直方向の差を計算することになりました。これにより、スワイプの垂直方向を判断するために使用できるものが得られました。かなり基本的ですが、問題なく動作するようです。

更新されたコードは次のようになります。

    public boolean onFling(MotionEvent start, MotionEvent finish, float velocityX,
                float velocityY) {
     //Right Swipe

     //Caluclate the vertical difference
     float verticalChange = start.getRawY() - finish.getRawY();

     if ((finish.getRawX() < start.getRawX()) && (verticalChange > -40 && verticalChange < 40)) {
        Toast.makeText(getApplicationContext(), "Showing Listings For : "+date.getDate(),Toast.LENGTH_SHORT).show();
      }

     if (start.getRawX() < finish.getRawX()) && (verticalChange > -40 && verticalChange < 40)) {
        Toast.makeText(getApplicationContext(), "Showing Listings For : "+date.getDate(),Toast.LENGTH_SHORT).show();
      }
    }
4

1 に答える 1

-1

水平スワイプのイベントをトリガーしない独自の垂直スクロールビューを拡張できます。もちろん、スクロール ビューではない部分をスワイプする必要があります。

-- 追加コメント --- さまざまな電話/デバイスでこれをテストしましたか? 異なる結果が得られる場合があります。

于 2013-02-26T12:47:37.623 に答える