【问题标题】:Detecting Swipe and Tap gestures检测滑动和点击手势
【发布时间】:2015-08-25 01:21:02
【问题描述】:

如何在onTouch 方法中检测滑动和点击?我希望在我轻扫时执行两个操作之一,而在我点击时执行其他操作。需要知道如何区分点按和滑动。

这是我的代码:

@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
    mGestureDetector.onTouchEvent(event);
}
switch(event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        x1 = event.getX();
        y1 = event.getY();
        break;
    case MotionEvent.ACTION_UP:
        x2 = event.getX();
        y2 = event.getY();

        float deltaX = x2 - x1;
        float deltaY = y2 - y1;

        if (Math.abs(deltaX) > MIN_DISTANCE) {
            mGestureDetector.onTouchEvent(event);
        }else if (Math.abs(deltaX) < MIN_DISTANCE) {
            mGestureDetector.onTouchEvent(event);
        }else if (Math.abs(deltaY) > MIN_DISTANCE) {
            mGestureDetector.onTouchEvent(event);
        }else if (Math.abs(deltaY) < MIN_DISTANCE) {
            mGestureDetector.onTouchEvent(event);
        }
        break;
}
return true;

}

【问题讨论】:

    标签: android swipe gesture motionevent ontouch


    【解决方案1】:

    这是你可以做的,在this link找到 在活动的onCreate中,添加这个。

    final GestureDetector gestureDetector = new GestureDetector(new GestureListener());
    calendar.setOnTouchListener(new OnTouchListener() {
       @Override
       public boolean onTouch(final View view, final MotionEvent event) {
       if (gestureDetector.onTouchEvent(event)) {
          return false;
        }
        return true;
      }
    });
    

    这里是 GestureDetector 类

    class GestureListener extends SimpleOnGestureListener {
        @Override
        public boolean onSingleTapConfirmed(MotionEvent event) {
        // Trigger the touch event on the calendar
          calendar.onTouchEvent(event);
          return super.onSingleTapUp(event);
        }
    
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        ViewConfiguration viewConfiguration = ViewConfiguration.get(EventsActivity.this);
        int minSwipeDistance = viewConfiguration.getScaledPagingTouchSlop();
        int minSwipeVelocity = viewConfiguration.getScaledMinimumFlingVelocity();
        int maxSwipeOffPath = viewConfiguration.getScaledTouchSlop();
        if (Math.abs(e1.getY() - e2.getY()) > maxSwipeOffPath) {
            return false;
        }
    
       if (Math.abs(velocityX) > minSwipeVelocity) {
       // Right to left swipe
          if (e1.getX() - e2.getX() > minSwipeDistance) {
          calendar.nextMonth();
       }
    
       // Left to right
       else if (e2.getX() - e1.getX() > minSwipeDistance) {
            calendar.previousMonth();
       }
    
        // Call some app-related functions to update the display
        displayDate(calendar.getMonth(), calendar.getYear());
      }
      return false;
     }
    }
    

    【讨论】:

    • 感谢您的回复。它不工作。我正在尝试在我自己的软键盘中实现手势,以便将屏幕从 qwerty 更改为数字,例如,如果您只需点击一个会打印该字母的字母。我的键盘与 onSwipe 方法一起工作得很好,但它并不准确。我发布的代码比你的更准确。因此,如果您能告诉我如何区分触摸和滑动。我在我发布的代码中尝试了一些东西,但我只能滑动而不是点击一个字母。
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2020-01-17
    • 2016-07-30
    相关资源
    最近更新 更多