Gesti verticali e orizzontali in Android

Vorrei che il mio GestureOverlayView sia in grado di individuare sia gesti puramente orizzontali che verticali.

Da http://android-developers.blogspot.com/2009/10/gestures-on-android-16.html

  • le modifiche di colore di background dell'elenco di listview sullo scorrimento,
  • Android: Perché Intent.EXTRA_LOCAL_ONLY mostra Google Photos
  • JNI: dal codice C a Java e JNI
  • Android chiamando .net webservice Ksoap2
  • Errore di rendering del cassetto di navigazione nell'editor di layout ADT
  • Imansible creare HTML5 Tag Audio per funzionare in browser per dispositivi mobili
  • "orientamento: indica l'orientamento di scorrimento delle viste sottostanti.In questo caso l'elenco scorre verticalmente, il che significa che tutti i gesti orizzontali (come action_delete) possono essere immediatamente riconosciuti come un gesto.I gesti che iniziano con una corsa verticale devono contenere alless una la componente orizzontale deve essere riconosciuta. In altre parole, una semplice linea verticale non può essere riconosciuta come un gesto poiché sarebbe in conflitto con lo scorrimento dell'elenco ".

    Sembra un catch-22, se l'android: l'orientamento è impostato su verticale, posso solo avere swip orizzontali e se l'android: l'orientamento è impostato su orizzontale, posso solo avere spazzature verticali. Come posso get questo requisito?

  • Esecuzione di test di Android Junit dalla row di command
  • Android - EditText sulla notifica di stato
  • Leakcanary rapporto di perdita di memory usando Otto
  • Errore di collegamento insoddisfatto - OpenCV per Android non nativo
  • Android: API per chat in diretta in android
  • Rileva la posizione del pollice in SeekBar prima della versione 16 dell'API
  • 4 Solutions collect form web for “Gesti verticali e orizzontali in Android”

    Mi sono imbattuto in questo problema in un hackathon. Non è ansible risolverlo con GestureOverlayView, pertanto è necessario utilizzare events di movimento. GestureOverlayView tuttavia funziona con gesti leggermente "dettagliati", come un cerchio. Quello che ho notato è che GestureOverlayView funziona meglio per figure chiuse. Così, il sensore motionEvent è. Ho trovato il codice qui . Ho modificato la risposta di Gav anche per i vertici verticali. Non lo hanno provato però, 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; } } 

    Adesso aggiungi ai punti di vista where desideri rilevare il gesto,

     // Do this for each view added to the grid imageView.setOnClickListener(SelectFilterActivity.this); imageView.setOnTouchListener(gestureListener); 

    Spero possa aiutare. Saluti a Gav per il codice!

    Tutto quello che devi fare è impostare il GestureStrokeAngleThreshold su un valore più vicino a 90 (ho usato 90f)

    Il valore predefinito del treppiedi angolo è 40.0f per cui si ignorano i semplici gesti verticali

    Forse non è il modo migliore per farlo, ma è ansible ignorare il comportmento predefinito estendendo GestureOverlayView

    Dovresti ignorare il metodo private Rect touchMove(MotionEvent event) e liberare il controllo di orientamento:

     if (box.squareness > mGestureStrokeSquarenessTreshold || (mOrientation == ORIENTATION_VERTICAL ? angle < mGestureStrokeAngleThreshold : angle > mGestureStrokeAngleThreshold)) { mIsGesturing = true; ... ... } 

    È l'unico posto in cui l'orientamento viene utilizzato, e quindi non c'è bisogno di modifiche estese. Solo un semplice estensione / sovrascrittura.

    Naturalmente, per farlo bene , aggiungeresti un ORIENTATION_NONE e verificherai che, come hanno fatto per il progetto Replicant , ma immagino che dipenda se tu ne avrai ancora bisogno della funzionalità.

    Hai visto http://developer.android.com/training/gestures/index.html ? Ho bisogno di ulteriori informazioni su ciò che stai cercando di fare con i gesti orizzontali e verticali per dare consigli più specifici. Ma avendo una zona di touch che fa una cosa con spazzature orizzontali e un'altra cosa con spazzature verticali è sicuramente ansible. Non è importnte anche che tu stia cercando linee perfettamente dritte, in quanto i tuoi utenti non saranno in grado di farli.

    Modifica (1): Hai visto http://www.vogella.com/articles/AndroidGestures/article.html ? Vogella sembra implica con il suo esempio che si può avere un gesto su e gesti laterali nel GestureOverlayView . È questo che stai cercando di fare?

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.