2012-06-04 3 views
3

У меня есть некоторые объекты, которые я хочу подключить к линиям. Пользователь должен иметь возможность сделать это простым строчным жестом. Я использую GestureOverlayView и читаю эту статью http://developer.android.com/resources/articles/gestures.html, в которой говорится следующее:android: как определить горизонтальные и вертикальные линии жеста

Ориентация: указывает ориентацию прокрутки снизу. В этом случае список прокручивается по вертикали, что означает, что любые горизонтальные жесты (например, action_delete) могут быть немедленно распознаны как жест. Жесты, начинающиеся с вертикального хода, должны содержать хотя бы один горизонтальный компонент, который должен быть распознан. Другими словами, простая вертикальная линия не может быть распознана как жест, поскольку она противоречит прокрутке списка.

И это моя проблема - я хочу, чтобы рисовать линии по горизонтали и вертикали

Теперь у меня есть OnGesturePerfomedListener, который делает нормальное распознавание жестов и дополнительно GestureOverlayView.OnGestureListener, в котором я обнаруживаю линии , Но теперь я хочу нарисовать пунктирную линию - также вертикальную и горизонтальную. Было бы намного проще, если бы я мог получить полный жест, как в OnGesturePerformedListener, вместо каждого штриха пунктирной линии, как в onGestureListener.

Любые идеи, как я могу решить это легко? Есть ли метод, который вызывается, когда выполняется gesturing, даже если он не распознается? Я также попытался использовать GestureDetector.OnGestureListener, который я теперь использую для обнаружения longPress, но это не поможет с этой проблемой.

+0

Вы получили решение. Я также сталкиваюсь с этой проблемой. Как я могу это сделать? – SKK

ответ

0

Найдено результатов по другим темам, которые могут быть полезны для вас (и всем, кто может столкнуться с этой проблемой). Это, скорее всего, потребует серьезного вмешательства, чтобы быть адаптированным для ваших целей, но я думаю, что он вас закроет:

//Swipe direction detection constants 
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; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.activity_main); 

    //Gesture detection 
    this.gestureDetector = new GestureDetectorCompat(this,this); 
    gestureDetector.setOnDoubleTapListener(this); 
} 

//On gesture... 
@Override 
public boolean onSingleTapConfirmed(MotionEvent e) { 
    return true; 
} 

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

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

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

@Override 
public void onShowPress(MotionEvent e) { 

} 

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

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    return true; 
} 

@Override 
public void onLongPress(MotionEvent e) { 

} 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

    try { 
     // right to left swipe 
     if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
       && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //DO SOMETHING... 
     } 
     // left to right swipe 
     else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
       && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      //DO SOMETHING... 
     } 
     // top to bottom swipe 
     if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE 
       && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      //DO SOMETHING... 
     } 
     // bottom to top swipe 
     else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE 
       && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      //DO SOMETHING... 
     } 
    } catch (Exception e) { 
     return false; 
    } 

    return true; 

} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    this.gestureDetector.onTouchEvent(event); 
    return super.onTouchEvent(event); 
} 
Смежные вопросы