2017-12-20 31 views
0

Skiasharpはメソッドでタッチイベントを操作することができますSkiaSharpでマルチタッチイベントを処理する方法は? Xamarin

private void OnTouch(object sender, SKTouchEventArgs args) 

この方法では、私が唯一のタッチポイントの座標扱うことができます。

args.Location.X, args.Location.Y 

しかし、どのように私は、マルチタッチイベントを検出することができますか?

たとえば、AndroidネイティブAPIを使用すると、マルチタッチを検出するために2つの指の位置を管理できます。

SkiaSharpでどうすれば実現できますか?

答えて

1

[OK]を私はここで私の質問の解決策をコードが見つかりました。

//マルチタッチ取り扱い

Dictionary<long, SKPoint> dragDictionary = new Dictionary<long, SKPoint>(); 

    private void OnTouch(object sender, SKTouchEventArgs e) 
    { 
     switch (e.ActionType) 
     { 
      case SKTouchAction.Pressed: 
       dragDictionary[e.Id] = e.Location; 
       break; 
      case SKTouchAction.Entered: 
       break; 
      case SKTouchAction.Moved: 
       if (dragDictionary.Keys.Count > 1) 
       { 
        dragDictionary[e.Id] = e.Location; 
        SKPoint? p1 = null; 
        SKPoint? p2 = null; 
        foreach (long key in dragDictionary.Keys) 
        { 
         if (p1 == null) 
         { 
          p1 = dragDictionary[key]; 
         } 
         else if (p2 == null) 
         { 
          p2 = dragDictionary[key]; 
         } 
        } 
        //MultiTouch handle 
       } 
       else 
       { 
        //SingleTouch handle 
       } 
       break; 
      case SKTouchAction.Released: 
       dragDictionary.Remove(e.Id); 
       break; 
      case SKTouchAction.Exited: 
       break; 
     } 
     // we have handled these events 
     e.Handled = true; 
     ((SKCanvasView)sender).InvalidateSurface(); 
    } 
関連する問題