Gesturecognizer Swipe Gesto.
-
21-12-2019 - |
Domanda
Sto cercando di rilevare un gesto di scorrimento orizzontale con Gesterrecognizer collegando al Crosssling evento.
_gr = new GestureRecognizer
{
GestureSettings = GestureSettings.ManipulationTranslateX |
GestureSettings.ManipulationTranslateY |
GestureSettings.CrossSlide
};
_gr.CrossSliding += OnSwipe;
_gr.ManipulationStarted += OnManipulationStarted;
_gr.ManipulationUpdated += OnManipulationUpdated;
_gr.ManipulationCompleted += OnManipulationCompleted;
_gr.CrossSlideHorizontally = true;
.
Come puoi vedere dal codice sopra, non solo il colpo deve essere rilevato, ma anche trascinando i gesti.
Il mio problema è che non riesco a personalizzare il gesto di scorrimento.
Voglio personalizzare la velocità minima e la distanza, un utente deve trascinare il puntatore prima che il gesto sia considerato un colpo. Nello stato corrente anche il movimento di trascinamento orizzontale più lento e più piccolo attiverà un evento CrossSliding
.
Ho visto il crossslidethreshelds Classe che consente di personalizzare il gesto, ma non potevo vedere come potrebbe essere usato per configurare la velocità e la distanza del gesto di scorrimento.
In caso contrario, come posso rilevare un gesto di scorrimento?
Soluzione
Non riesco a trovare alcun modo in modo da rilevare un colpo per rilevare un colpo, quindi ho implementato il mio metodo di rilevamento.
Il codice rileva un colpo orizzontale.
I metodi visualizzati sono i gestori degli eventi per gli eventi GestureRecognizer
:
readonly Stopwatch _manipulationTimer = new Stopwatch();
public void OnManipulationStarted(ManipulationStartedEventArgs e)
{
_manipulationTimer.Restart();
}
public void OnManipulationCompleted(ManipulationCompletedEventArgs e)
{
var millis = _manipulationTimer.ElapsedMilliseconds;
if (Math.Abs(e.Cumulative.Translation.Y) < MaxVerticalSwipeDistanceInPix &&
Math.Abs(e.Cumulative.Translation.X) > MinHorizontalSwipeDistanceInPix &&
millis > MinSwipeDurationInMillis &&
millis < MaxSwipeDurationInMillis &&
Math.Abs(e.Cumulative.Scale - 1) < 0.01 // 1 touch point
)
{
var leftSwipe = e.Cumulative.Translation.X < 0;
if (leftSwipe)
{
}
else // right swipe
{
}
}
_manipulationTimer.Stop();
_manipulationTimer.Reset();
}
.