2017-02-01 4 views
0

ダブルタップが検出されたときに、デバッグの出力を、私はXamarin.Androidで次のジェスチャー検出器を持っている(ただし、クラスが同じであるため、おそらく同じネイティブアンドロイド適用されます)GestureDetectorの2番目のタップのポイントを知るには?

public class GestureListener : GestureDetector.SimpleOnGestureListener 
{ 
    public override bool OnDown(MotionEvent e) 
    { 
     Debug.WriteLine($"OnDown: {e.GetX()} {e.GetY()}"); 

     return false; 
    } 

    public override bool OnDoubleTap(MotionEvent e) 
    { 
     Debug.WriteLine($"OnDoubleTap: {e.GetX()} {e.GetY()}"); 

     return true; 
    } 
} 

OnDown: 667.3821 861.5184 
OnDoubleTap: 667.3821 861.5184 
OnDown: 667.3821 861.5184 
です

最初のログは最初のタップであり、次の2は2番目のタップであり、ログは常に同じポイント(最初のもの)です。私が持っている問題は、それらの間の距離を見るために両方の点が必要なことです(ダブルタップは画面のどの部分でも連続して2タップでトリガーされており、必要なものではありません)。私は両方のポイントを得ることができますか?

+0

私の答えを確認しましたか?何の問題? –

答えて

0

問題は、私はそれらの間の距離を見るために両方の点が必要であるということです。

2つのタッチポイント間の距離を計算するために、我々はGestureDetector.IOnGestureListenerインターフェイスを実装することができ、それらは単にこのように、たとえばOnTouchEventで計算する:GestureDetector.IOnGestureListenerインタフェースを実装するには

public override bool OnTouchEvent(MotionEvent e) 
{ 
    _gestureDetector.OnTouchEvent(e); 
    var count = e.PointerCount; 
    if (count == 2) 
    { 
     //distance 
     float x = e.GetX(0) - e.GetX(1); 
     float y = e.GetY(0) - e.GetY(1); 
     var distance = Math.Sqrt(x * x + y * y); 
     Console.WriteLine("distance:" + distance); 

     //center point 
     float xx = e.GetX(0) + e.GetX(1); 
     float yy = e.GetY(0) + e.GetY(1); 
     var midpoint = new PointF(x/2, y/2); 
    } 
    return false; 
} 

、あなたはを参照することができますCreate a Gesture Listener

関連する問題