📜  如何在 Android 中检测滑动方向?(1)

📅  最后修改于: 2023-12-03 15:24:06.670000             🧑  作者: Mango

如何在 Android 中检测滑动方向?

在 Android 中,我们可以通过监听触摸事件来检测滑动方向。下面介绍一种简单的方法:

首先,在布局文件中添加一个需要监听滑动事件的控件,例如一个ScrollView或者RecyclerView等。例如,在activity_main.xml中添加一个ScrollView

<ScrollView
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"> 

    ... // 此处添加需要滑动的内容

</ScrollView>

然后,在对应的 Activity 或 Fragment 中,监听滑动事件,并根据滑动的位置变化来判断滑动的方向。此处可以使用 GestureDetector 进行处理。具体代码如下:

public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {

    private GestureDetector gestureDetector; // 定义 GestureDetector
    private boolean isScrollingUp = false; // 是否向上滑动

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 创建 GestureDetector
        gestureDetector = new GestureDetector(this, this);

        // 设置滑动监听
        ScrollView scrollView = findViewById(R.id.scroll_view);
        scrollView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        });
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        if (e1.getY() - e2.getY() > 50) {
            isScrollingUp = true; // 手指向上滑动
        } else if (e2.getY() - e1.getY() > 50) {
            isScrollingUp = false; // 手指向下滑动
        }
        return true;
    }

    // 其他未实现的方法可以不用写入代码中
    ...
}

上述代码中,我们在 onCreate 方法中创建 GestureDetector 并设置滑动监听,实现了 OnGestureListener 接口中的 onFling 方法,利用 MotionEvent 对象来检测滑动的方向,最后将结果保存在布尔型的 isScrollingUp 变量中。此变量可以在需要的地方使用。

最后,如果需要判断手指是否在屏幕滑动,可以在 dispatchTouchEvent 方法中添加如下代码:

public boolean dispatchTouchEvent(MotionEvent ev) {
    gestureDetector.onTouchEvent(ev);
    return super.dispatchTouchEvent(ev);
}

这样,在任何时候都可以获取手指在屏幕上的滑动方向。