2017-08-28 37 views
0

QmlのMouseAreaでスワイプを検出する方法は問題がありますか?ドキュメントからMouseArea Qtの左または右のスワイプを検出するQML

このコードは、:

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 ? 
     } 
    } 
} 

が、左または右にスワイプ取得する方法を私は理解していなかった、私は、モバイルアプリケーション(IOS &アンドロイド)でこの使用を取得します。

誰かが私を助けることができますか?ありがとう。 指で左または右のスワイプを検出するにはどうすればよいですか?ありがとう。だから、これはあなたがそれを検出し、正確にどのようにある

Touch -> Movement -> Release 

+2

MultiPointTouchArea QML Typeをご覧ください。 – ManuelH

答えて

0

スワイプイベントの簡単なチェーンであるあなたは、いくつかの変数(例えばoriginX/Y)onPressedを初期化

、あなたは運動onPositionChangedを検出します原点と現在の位置の間のベクトルを計算し、長さと方向を分析して方向と速度を評価する。 originX/Yを新しい位置に設定し、onReleasedまで続けます。次に、スワイプであるかどうかを判断することができます(最後のベクトルや動きの履歴に応じて、何らかの方法で計算されたベクトルを格納または蓄積します)

あなたが考慮する必要があるもの:ユーザーのための短絡は、リリースの直前または2つのステップの間にリリースするために減速します。したがって、最後のベクトルだけを考慮すると、悪い結果が得られる可能性があります。

代わりに、最後のn個のベクトルを累積していくらかの重みを適用することができます。

また、onPositionChangedをTimerに置き換えて解析する間隔を長くすると、改善が得られる可能性があります。このインターバルで試合をして、最適な行動を見つけることができます。

検出に細かく調整されたアルゴリズムを実装することは自明ではないため、自分で検出を実装する必要があるかどうか、またはスワイプ動作を実装した多くのItem

+0

自動でスワイプを検出するQT/QMLクロスプラットフォームフレームワークに1つのモードが存在しない可能性がありますか? OK ...私は押したxとリリースxに乗り、スワイプ方向を検出するベクトルを計算します.thanks –

+0

@ Mr.Developer nope。 DIYに行ってください。かつては( '' GestureArea'(http://doc.qt.io/qt-4.8/qml-gesturearea.html))が( '' PinchArea'(http:// doc qt-5/qml-qtquick-pincharea.html)と['MultiPointTouchArea'](http://doc.qt.io/qt-5/qml-qtquick-multipointtoucharea.html)を参照してください。元のものを使ったことはありませんでしたが、後者は私の必要性のために非常にうまくいった – BaCaRoZzo

関連する問題