Tôi đã gặp phải sự cố này tại một cuộc chạy đua. Không có cách nào bạn có thể giải quyết nó bằng GestureOverlayView, vì vậy bạn phải sử dụng các sự kiện chuyển động. Tuy nhiên, GestureOverlayView hoạt động với các cử chỉ "chi tiết" hơn một chút, giống như hình tròn. Những gì tôi đã nhận thấy là GestureOverlayView hoạt động tốt nhất cho các hình đóng. Vì vậy, motionEvent cảm biến nó được. Tôi đã tìm thấy mã số here. Tôi cũng đã sửa đổi câu trả lời của Gav cho các lần vuốt dọc. Chưa thử nghiệm nó, nhưng tích cực rằng nó sẽ làm việc.
Dưới đây là một ví dụ:
public class SelectFilterActivity extends Activity implements OnClickListener
{
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* ... */
// Gesture detection
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
};
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
// downward swipe
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY)
Toast.makeText(SelectFilterActivity.this, "Downward Swipe", Toast.LENGTH_SHORT).show();
else if (Math.abs(e2.getY() - e1.getY()) > SWIPE_MAX_OFF_PATH && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY)
Toast.makeText(SelectFilterActivity.this, "Upward Swipe", Toast.LENGTH_SHORT).show();
// right to left swipe
else if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
// nothing
}
return false;
}
}
Bây giờ thêm nó vào quan điểm mà bạn muốn phát hiện cử chỉ,
// Do this for each view added to the grid
imageView.setOnClickListener(SelectFilterActivity.this);
imageView.setOnTouchListener(gestureListener);
Cheers cho Gav cho mã!
Nguồn
2013-01-13 10:01:21
Bạn đã bao giờ tìm ra giải pháp cho điều này chưa? – capcom
Không, vẫn chưa có giải pháp nào cho Android ... – Bashevis
Geez, vậy làm thế nào để tôi làm những gì tôi cần? Tôi thực sự cần phải làm điều này. Hướng dẫn này hiển thị lên và xuống được thực hiện trong Gestures Builder http://www.vogella.com/articles/AndroidGestures/article.html, mặc dù không được sử dụng. Đây là câu hỏi của riêng tôi, nếu bạn muốn có một cái nhìn, http://stackoverflow.com/questions/14246998/detecting-vertical-gestures. Nó không có ý nghĩa rằng không có cách nào để làm điều này, các ứng dụng khác sử dụng loại chức năng tất cả các thời gian. – capcom