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.

L'evento CrossSliding è il modo corretto per rilevare un colpo? In tal caso, come posso configurare la velocità e la distanza di scorrimento?

In caso contrario, come posso rilevare un gesto di scorrimento?

È stato utile?

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();
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top