Mi sono imbattuto in questo problema in un hackathon. Non è possibile risolverlo con GestureOverlayView, quindi è necessario utilizzare gli eventi di movimento. GestureOverlayView tuttavia funziona con gesti leggermente più "dettagliati", come un cerchio. Quello che ho notato è che GestureOverlayView funziona al meglio per le figure chiuse. Quindi, sensore motionEvent è. Ho trovato il codice here. Ho modificato anche la risposta di Gav per gli swip verticali. Non l'ho provato, ma è positivo che dovrebbe funzionare.
Ecco un esempio:
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;
}
}
aggiungervi il punto di vista in cui desideri rilevamento gesto,
// Do this for each view added to the grid
imageView.setOnClickListener(SelectFilterActivity.this);
imageView.setOnTouchListener(gestureListener);
Saluti a Gav per il codice!
fonte
2013-01-13 10:01:21
Hai mai trovato una soluzione a questo? – capcom
No, non c'è ancora nessuna soluzione per Android ... – Bashevis
Accidenti, quindi come faccio a fare ciò che mi serve? Ho davvero bisogno di farlo. Questo tutorial mostra su e giù in Gestures Builder http://www.vogella.com/articles/AndroidGestures/article.html, sebbene non utilizzato. Ecco la mia domanda, se vuoi dare un'occhiata, http://stackoverflow.com/questions/14246998/detecting-vertical-gestures. Non ha senso che non ci sia modo di farlo, altre app usano questo tipo di funzionalità tutto il tempo. – capcom