2017-08-28 2 views
0

Ich habe das Problem, wie Swipe durch MouseArea in qml zu erkennen?Detect linken oder rechten Streichen durch MouseArea Qt QML

Dieser Code, von der Dokumentation:

Rectangle { 
    id: container 
    width: 600; height: 200 

    Rectangle { 
     id: rect 
     width: 500; height: 500 

     MouseArea { 
      anchors.fill: parent 
      drag.target: rect 
      drag.axis: Drag.XAxis 
      drag.minimumX: 0 
      drag.maximumX: container.width - rect.width 

      //event slide here ? 
     } 
    } 
} 

aber ich verstand nicht, wie, erhalten in der mobilen Anwendung dieser Verwendung i nach links oder rechts streichen Sie erhalten (ios & android).

Jemand kann mir helfen? Vielen Dank. Wie erkennt man den linken oder rechten Schlag mit dem Finger? Vielen Dank.

+2

Werfen Sie einen Blick auf MultiPointTouchArea QML Type. – ManuelH

Antwort

0

Swipe ist eine einfache Kette von Ereignissen:

Touch -> Movement -> Release 

Also das ist genau, wie Sie es erkennen:

Sie einige Variablen initialisieren (zB originX/Y) onPressed, dann erkennen Sie Bewegung onPositionChanged Berechnen Sie den Vektor zwischen Ursprung und aktueller Position, analysieren Sie Länge und Richtung, um die Richtung und Geschwindigkeit zu berechnen. Setzen Sie originX/Y auf die neue Position und fahren Sie fort bis onReleased. Dann können Sie bestimmen, ob es sich um einen Swipe handelte (abhängig vom letzten Vektor oder vom Verlauf der Bewegung - speichern oder akkumulieren Sie die berechneten Vektoren in dieser Weise)

Dinge, die Sie beachten sollten: Die letzte Bewegung könnte sein kurz für den Benutzer verlangsamt sich kurz vor der Veröffentlichung oder weil zwischen zwei Schritten er veröffentlicht. Wenn nur der letzte Vektor in Betracht gezogen wird, kann dies zu schlechten Ergebnissen führen.

Stattdessen könnten Sie die letzten n Vektoren akkumulieren und etwas Gewicht anwenden.

Sie könnten auch verbessern, wenn Sie die onPositionChanged durch einen Timer ersetzen, um längere Intervalle zu analysieren. Sie können mit dem Intervall spielen, um ein optimales Verhalten zu finden.

Da es nicht trivial ist, einen fein abgestimmten Algorithmus für die Erkennung zu implementieren, empfehle ich zu überdenken, ob es notwendig ist, die Erkennung selbst zu implementieren, oder ob einer der vielen implementierten Swipe-Funktionen ausreicht .

+0

ist es möglich, dass nicht ein Modus im QT/QML-Cross-Plattform-Framework vorhanden ist, der automatisches Wischen erkennt? ok ... ich werde auf x gedrückt und auf Release x und werde den Vektor berechnen, um die Swipe-Richtung zu erkennen .. danke –

+0

@ Mr.Developer nein. Du solltest DIY machen. Es gab einmal eine ['GestureArea'] (http://doc.qt.io/qt-4.8/qml-gesturearea.html), die jetzt (fast) durch [PinchArea'] ersetzt wurde (http: // doc .qt.io/qt-5/qml-qtquick-pincharea.html) und ['MultiPointTouchArea'] (http://doc.qt.io/qt-5/qml-qtquick-multipointtoucharea.html). Habe das Original nie benutzt, aber letzteres hat ganz gut für meine Bedürfnisse funktioniert. – BaCaRoZzo

Verwandte Themen