ユーザーが水平スワイプを使用してさまざまな画面をナビゲートできるアプリを構築していますが、これらの画面には垂直スクロールビューも含まれています。垂直スクロールが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();
}
}