Pan Geste verhält sich in Android gegen Windows andersAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Pan Geste verhält sich in Android gegen Windows anders

Post by Anonymous »

Ich habe einen PeNDesturerecognizer pro Element, um jedes Element auf den Bildschirm zu ziehen. An Fenstern verhält es sich wie beabsichtigt, aber auf Android gibt es ein Problem, wenn mehrere aktive Details vorhanden sind. Arbeiten Sie mit mehreren gleichzeitigen Gesten (an mehreren Elementen) und lassen Sie sich nicht von einem Touch außerhalb des Elements mit der aktiven Geste betroffen. A

Auf Windows Touch B wird ignoriert. ✓ ✖

Android -Emulator -Demo


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>

Erstellen Sie ein leeres Maui -Projekt mit .NET 8 und ersetzen Sie die MainPage -Datei durch diese < /p>
< /blockquote>

Ich habe 2 Elemente mit Pan -Geress hinzugefügt, aber das zweite Element muss das Problem nicht replizieren. Ich bin mir nicht sicher, was dies verursacht, der Code passt bereits die Gestenpositionslogik für jede Plattform an, aber ich bin nicht sicher, warum er sich auf Android verhält. Geste, als eine andere Geste abgeschlossen war, habe ich dies nicht auf dem angegebenen Beispielcode getestet.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post