Android 下的手势判断
在应用中,为了区分手指滑动(scroll)与甩动(fling),使用了如下代码:
// 1、创建手势监听器,在其中可以对各种手势动作重载,加入自己的代码
GestureDetector.SimpleOnGestureListener listener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// 计算位移
float dx = e2.getX() - e1.getX();
float dy = e2.getY() - e1.getY();
// 向右横向甩动,打开菜单
if (Math.abs(dx) > 1.5 * Math.abs(dy) && dx > 0)
drawerLayout.openDrawer(GravityCompat.START);
// 纵向甩动,翻页,判定纵向速度是为了与scroll动作区分
else if (Math.abs(dx) * 1.5 < Math.abs(dy) && Math.abs(velocityY) > 2000)
Snackbar.make(tvMain, String.format("纵向甩动 v=%f", velocityY), Snackbar.LENGTH_LONG).show();
return super.onFling(e1, e2, velocityX, velocityY);
}
};
// 2、用上面创建的手势监听器创建手势检测器
final GestureDetector detector = new GestureDetector(this, listener);
// 3、在控件的 onTouch 事件中返回手势检测器的 onTouchEvent 值
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
return detector.onTouchEvent(event);
}
});

浙公网安备 33010602011771号