識別手勢滑動的方向主要是用的 GestureDetector的onFling ,如果想回顧下GestureDetector 可以參考下面的連結地址
問題也比較簡單下面給出程式碼:
public class FlingActivity extends AppCompatActivity {
private GestureDetector gestureDetector;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
gestureDetector = new GestureDetector(FlingActivity.this,
new GestureDetector.SimpleOnGestureListener() {
/**
* e1: 第一次按下的位置
* e2 當手離開螢幕 時的位置
* velocityX 沿x 軸的速度
* velocityY: 沿Y軸方向的速度
* @param e1
* @param e2
* @param velocityX
* @param velocityY
* @return
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// 手勢向上滑動
if (e1.getRawY() - e2.getRawY() > 200) {
Toast.makeText(FlingActivity.this, "手勢向上滑動", Toast.LENGTH_SHORT).show();
return true;
}
// 手勢向下滑動
if (e2.getRawY() - e1.getRawY() > 200) {
Toast.makeText(FlingActivity.this, "手勢向下滑動", Toast.LENGTH_SHORT).show();
return true;
}
// 手勢向右滑動
if ((e1.getRawX() - e2.getRawX()) > 200) {
Toast.makeText(FlingActivity.this, "手勢向右滑動", Toast.LENGTH_SHORT).show();
return true;
}
// 手勢向左邊滑動
if ((e2.getRawX() - e1.getRawX()) > 200) {
Toast.makeText(FlingActivity.this, "手勢向左邊滑動", Toast.LENGTH_SHORT)
.show();
return true; // 消費掉當前事件 不讓當前事件繼續向下傳遞
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
}