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);
	}
});
posted @ 2022-04-01 08:04  汉学  阅读(132)  评论(0)    收藏  举报