How to get GestureDetector working correctly

只谈情不闲聊 提交于 2019-12-14 03:42:27

问题


I have this code so far in my Activity:

private class SwipeGestureDetector extends SimpleOnGestureListener {
    // Swipe properties, you can change it to make the swipe 
    // longer or shorter and speed
    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 200;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
      try {
        float diffAbs = Math.abs(e1.getY() - e2.getY());
        float diff = e1.getX() - e2.getX();
        Log.d("MainDisplayActivity", "Gesture class is running");
        if (diffAbs > SWIPE_MAX_OFF_PATH)
          return false;

        // Left swipe
        if (diff > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
           MainDisplayActivity.this.onLeftSwipe();

        // Right swipe
        } else if (-diff > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
          MainDisplayActivity.this.onRightSwipe();

        }

      } catch (Exception e) {
        Log.e("YourActivity", "Error on gestures");

      }
      return false;
    }

  }//end of SwipeGestureDetector class

  //methods called by SwipeGestureDetector when the approrpiate swipes occured
  private void onLeftSwipe() {
        Toast.makeText(this, "Successfully have the swipe working for left", Toast.LENGTH_SHORT).show();
  }

  private void onRightSwipe() {
      Toast.makeText(this, "Successfully have the swipe working for right", Toast.LENGTH_SHORT).show();
  }

and I have this global: private GestureDetector gestureDetector;

and on onCreate I have this because its what I have seen people do:

gestureDetector = new GestureDetector(this, new SwipeGestureDetector());
    ((LinearLayout)findViewById(R.id.parent_main_display)).setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
        }
    });

Not really sure what I am doing wrong, but nothing is happening when I swipe. Any ideas?


回答1:


You should ovveride the next

@Override
 public boolean onDown(MotionEvent e) {
  return true;
 }

 @Override
 public boolean onSingleTapUp(MotionEvent e) {
  return true;
 }

also onFling should return true



来源:https://stackoverflow.com/questions/11742051/how-to-get-gesturedetector-working-correctly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!