2017-12-20 24 views
0

Skiasharp는 방법에 터치 이벤트를 조작 할 수 있습니다 :이 방법SkiaSharp로 Multi-Touch 이벤트를 처리하는 방법은 무엇입니까? 자 마린

private void OnTouch(object sender, SKTouchEventArgs args) 

나는 하나의 터치 포인트 좌표를 처리 할 수 ​​

args.Location.X, args.Location.Y 

을하지만 어떻게 멀티 터치 이벤트를 감지 할 수 있습니까?

예를 들어 Android 네이티브 API를 사용하면 멀티 터치를 감지하기 위해 두 손가락 위치를 관리 할 수 ​​있습니다.

SkiaSharp로 어떻게 그 효과를 얻을 수 있습니까?

답변

1

좋아, 코드는 내 질문에 대한 해결책을 찾았습니다.

// 멀티 터치 처리

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(); 
    }