private void ProcessTouchEvent(long id, MotionEventActions type, SKPoint location) { switch (type) { case MotionEventActions.Down: case MotionEventActions.Pointer2Down: case MotionEventActions.Pointer1Down: touchDictionary.Add(id, new TouchManipulationInfo { PreviousPoint = location, NewPoint = location }); break; case MotionEventActions.Move: TouchManipulationInfo info = touchDictionary[id]; info.NewPoint = location; Manipulate(); info.PreviousPoint = info.NewPoint; break; case MotionEventActions.Up: case MotionEventActions.Pointer2Up: case MotionEventActions.Pointer1Up: touchDictionary[id].NewPoint = location; //Manipulate(); touchDictionary.Remove(id); break; case MotionEventActions.Cancel: touchDictionary.Remove(id); break; } }
private void Manipulate() { TouchManipulationInfo[] infos = new TouchManipulationInfo[touchDictionary.Count]; touchDictionary.Values.CopyTo(infos, 0); SKMatrix touchMatrix = SKMatrix.MakeIdentity(); if (infos.Length == 1) { SKPoint prevPoint = infos[0].PreviousPoint; SKPoint newPoint = infos[0].NewPoint; SKPoint pivotPoint = Matrix.MapPoint(_info.Width / 2, _info.Height / 2); OneFingerManipulate(prevPoint, newPoint, pivotPoint); } else if (infos.Length >= 2) { int pivotIndex = infos[0].NewPoint == infos[0].PreviousPoint ? 0 : 1; SKPoint pivotPoint = Matrix.MapPoint(_info.Width / 2, _info.Height / 2); SKPoint newPoint = infos[1 - pivotIndex].NewPoint; SKPoint prevPoint = infos[1 - pivotIndex].PreviousPoint; TwoFingerManipulate(prevPoint, newPoint, pivotPoint); } }