2015-06-10 170 views
2

如何检测轻扫手势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; 

}

回答

0

这里是你可以做什么,在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; 
} 
} 
+0

感谢您的答复。它不工作。我试图在自己的软键盘中实现手势,以便将屏幕从qwerty更改为数字,例如,如果您只需点击一个可以打印该字母的单个字母。我的键盘用onSwipe方法工作得很好,但它不准确。我发布的代码比您的更准确。所以,如果你能告诉我如何区分触摸和滑动。我尝试了我发布的代码中的某些内容,但我只能轻扫一下,不能点击单个字母。 – jelic98