Для моего приложения я хотел бы использовать все встроенные возможности манипуляции, например, масштабирования. Но если пользователь нажимает 3 пальца на экран, я хотел бы показать определенный элемент пользовательского интерфейса. Итак, что является лучшим способом проверить, нажал ли пользователь 3 пальца одновременно и рядом друг с другом на экране? (без отключения встроенных возможностей манипуляции).Как проверить, установлены ли 3 пальца на экране
Мой первый подход состоял в регистрации события TouchDown в верхнем элементе Grid моего макета. В обработчике событий я получаю контакт. Но что там делать?
Просто проверьте, является ли контакт отпечатком пальца, сохраните его в списке и проверьте, содержит ли список уже два аналогичных контакта?
Или есть более сексуальное решение?
Спасибо!
Edit:
После ответа я написал два метода:
private void OnContactDown(object sender, ContactEventArgs e)
{
if (this.ContactsOver.Count == 3)
{
Console.WriteLine("3 contacts down. Check proximity");
if (areNear(this.ContactsOver))
{
Console.WriteLine("3 fingers down!");
}
}
}
private Boolean areNear(ReadOnlyContactCollection contacts)
{
if (Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(1).GetCenterPosition(this).X) < 100 &&
Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(1).GetCenterPosition(this).Y) < 100 &&
Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 &&
Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100 &&
Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 &&
Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100)
{
return true;
}
else
{
return false;
}
}
Они должны быть переписаны, но это работает. И порог (atm 100) должен быть скорректирован.
Будьте осторожны при хранении 'contact' s в вашем собственном списке. Любые вызовы в поле «контакт» или использование полей генерируют исключение, если палец, который вызвал «контакт», больше не работает. – Donnie