У меня есть один pangesturerecognizer на элемент для перетаскивания каждого элемента на экране, в Windows он ведет себя как предполагаемый, но на Android есть проблема, когда есть несколько активных штрихов. С множественными одновременными жестами (на нескольких элементах) и не влияет какое -либо прикосновение вне элемента с активным жестом.
на Android Когда выпускается , жест продолжается с позиции Touch B . ✖
В Windows touch b игнорируется. ✓ < /p>
Пример кода < /h3>
mainpage.csобразнойusing Microsoft.Maui.Controls.Shapes;
namespace PanGestureIssueDemo;
public class MainPage : ContentPage
{
readonly AbsoluteLayout display;
Rectangle a, b;
Dictionary rectangleStartPointPair = [];
public MainPage()
{
display = [];
Content = display;
a = new()
{
StrokeThickness = 10,
Fill = Colors.Red,
WidthRequest = 50,
HeightRequest = 50,
TranslationX = 50,
TranslationY = 50
};
PanGestureRecognizer panA = new();
panA.PanUpdated += OnPanUpdated;
a.GestureRecognizers.Add(panA);
rectangleStartPointPair[a] = new(0, 0);
display.Add(a);
b = new()
{
StrokeThickness = 10,
Fill = Colors.Green,
WidthRequest = 50,
HeightRequest = 50,
TranslationX = 150,
TranslationY = 50
};
PanGestureRecognizer panB = new();
panB.PanUpdated += OnPanUpdated;
b.GestureRecognizers.Add(panB);
rectangleStartPointPair = new(0, 0);
display.Add(b);
}
private void OnPanUpdated(object? sender, PanUpdatedEventArgs e)
{
if (!a.Equals(sender) && !b.Equals(sender))
{
return;
}
Rectangle rectangle = (Rectangle)sender;
Point startPoint = rectangleStartPointPair[rectangle];
switch (e.StatusType)
{
case GestureStatus.Completed:
break;
case GestureStatus.Canceled:
break;
case GestureStatus.Started:
startPoint.X = rectangle.TranslationX;
startPoint.Y = rectangle.TranslationY;
rectangleStartPointPair[rectangle] = startPoint;
break;
case GestureStatus.Running:
if (DeviceInfo.Platform == DevicePlatform.Android)
{
startPoint.X = rectangle.TranslationX;
startPoint.Y = rectangle.TranslationY;
rectangleStartPointPair[rectangle] = startPoint;
}
double xPosition = startPoint.X + e.TotalX;
double yPosition = startPoint.Y + e.TotalY;
rectangle.TranslationX = xPosition;
rectangle.TranslationY = yPosition;
break;
}
}
}
< /code>
Создать пустой проект MAUI с использованием .NET 8 и заменить файл основной страницы на это < /p>
< /blockquote>
Я добавил 2 элемента с жестом Pan для полноты, но второй элемент не требуется, чтобы повторить проблему. Я не уверен, что вызывает это, код уже адаптирует логику позиции жеста для каждой платформы, но я не уверен, почему он ведет себя как на Android, я попытался установить точки отстранения Жест, когда был завершен другой жест, я не проверил это в предоставленном примере кода.
Подробнее здесь: https://stackoverflow.com/questions/796 ... vs-windows
Жест PAN ведет себя по -разному в Android против Windows ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1747509265
Anonymous
У меня есть один pangesturerecognizer на элемент для перетаскивания каждого элемента на экране, в Windows он ведет себя как предполагаемый, но на Android есть проблема, когда есть несколько активных штрихов. С множественными одновременными жестами (на нескольких элементах) и не влияет какое -либо прикосновение вне элемента с активным жестом.
на Android Когда выпускается , жест продолжается с позиции Touch B . ✖
В Windows touch b игнорируется. ✓ < /p>
Пример кода < /h3>
mainpage.csобразнойusing Microsoft.Maui.Controls.Shapes;
namespace PanGestureIssueDemo;
public class MainPage : ContentPage
{
readonly AbsoluteLayout display;
Rectangle a, b;
Dictionary rectangleStartPointPair = [];
public MainPage()
{
display = [];
Content = display;
a = new()
{
StrokeThickness = 10,
Fill = Colors.Red,
WidthRequest = 50,
HeightRequest = 50,
TranslationX = 50,
TranslationY = 50
};
PanGestureRecognizer panA = new();
panA.PanUpdated += OnPanUpdated;
a.GestureRecognizers.Add(panA);
rectangleStartPointPair[a] = new(0, 0);
display.Add(a);
b = new()
{
StrokeThickness = 10,
Fill = Colors.Green,
WidthRequest = 50,
HeightRequest = 50,
TranslationX = 150,
TranslationY = 50
};
PanGestureRecognizer panB = new();
panB.PanUpdated += OnPanUpdated;
b.GestureRecognizers.Add(panB);
rectangleStartPointPair[b] = new(0, 0);
display.Add(b);
}
private void OnPanUpdated(object? sender, PanUpdatedEventArgs e)
{
if (!a.Equals(sender) && !b.Equals(sender))
{
return;
}
Rectangle rectangle = (Rectangle)sender;
Point startPoint = rectangleStartPointPair[rectangle];
switch (e.StatusType)
{
case GestureStatus.Completed:
break;
case GestureStatus.Canceled:
break;
case GestureStatus.Started:
startPoint.X = rectangle.TranslationX;
startPoint.Y = rectangle.TranslationY;
rectangleStartPointPair[rectangle] = startPoint;
break;
case GestureStatus.Running:
if (DeviceInfo.Platform == DevicePlatform.Android)
{
startPoint.X = rectangle.TranslationX;
startPoint.Y = rectangle.TranslationY;
rectangleStartPointPair[rectangle] = startPoint;
}
double xPosition = startPoint.X + e.TotalX;
double yPosition = startPoint.Y + e.TotalY;
rectangle.TranslationX = xPosition;
rectangle.TranslationY = yPosition;
break;
}
}
}
< /code>
Создать пустой проект MAUI с использованием .NET 8 и заменить файл основной страницы на это < /p>
< /blockquote>
Я добавил 2 элемента с жестом Pan для полноты, но второй элемент не требуется, чтобы повторить проблему. Я не уверен, что вызывает это, код уже адаптирует логику позиции жеста для каждой платформы, но я не уверен, почему он ведет себя как на Android, я попытался установить точки отстранения Жест, когда был завершен другой жест, я не проверил это в предоставленном примере кода.
Подробнее здесь: [url]https://stackoverflow.com/questions/79626645/pan-gesture-behaves-differently-in-android-vs-windows[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия