2018/10/26

[Android] Swipe Gesture Detection

Android目前還沒有現成的函式可以判斷一些滑動的手勢,例如:向左滑、向右滑、向上滑、向下滑。
只好透過利用OnTouchListener來自己寫一個滑動手勢的判斷。
如果想要在一個ImageView圖片上判斷滑動的手勢,
先在xml檔裡面建立一個ImageView的物件,以及一個TextView顯示判斷結果。

接著在MainActivity.java裡先設定好前置作業:
  1. private int swipe_d = 10; // threshold for swipe distance
  2. private TextView tvText;
  3. private ImageView ivImage;

onCreate中在要判斷的ImageView上設定一個setOnTouchListener:
  1. tvText = (TextView)findViewById(R.id.id_tvText);
  2. ivImage = (ImageView)findViewById(R.id.id_ivImage);
  3. ivImage.setOnTouchListener(bgImgListener);

加入一個OnTouchListener的函式,透過觸控的x、y座標來判斷手勢操作
  1. private View.OnTouchListener bgImgListener = new View.OnTouchListener() {
  2. float x1, x2, y1, y2;
  3. @Override
  4. public boolean onTouch(View v, MotionEvent event) {
  5. switch (event.getAction()) {
  6. case MotionEvent.ACTION_DOWN:
  7. x1 = event.getX();
  8. y1 = event.getY();
  9. break;
  10.  
  11. case MotionEvent.ACTION_UP:{
  12. x2 = event.getX();
  13. y2 = event.getY();
  14. if (x1 < x2 && Math.abs(y1-y2) < Math.abs(x1-x2) && Math.abs(x1-x2) > swipe_d) {
  15. tvText.setText("Swipe Right");
  16. }
  17. else if (x1 > x2 && Math.abs(y1-y2) < Math.abs(x1-x2) && Math.abs(x1-x2) > swipe_d) {
  18. tvText.setText("Swipe Left");
  19. }
  20. else if (y1 < y2 && Math.abs(x1-x2) < Math.abs(y1-y2) && Math.abs(y1-y2) > swipe_d) {
  21. tvText.setText("Swipe Down");
  22. }
  23. else if (y1 > y2 && Math.abs(x1-x2) < Math.abs(y1-y2) && Math.abs(y1-y2) > swipe_d) {
  24. tvText.setText("Swipe Up");
  25. }
  26. else if(x1 == x2 && y1 == y2){
  27. tvText.setText("Click");
  28. }
  29. break;
  30. }
  31. }
  32. return true;
  33. }
  34. };

(END)

沒有留言:

張貼留言