tapped tapgesturerecognizer recognizers recognizer gesturerecognizers event clicked android xaml xamarin xamarin.forms

android - tapgesturerecognizer - Xamarin.Forms reconocedor de gesto de deslizamiento



xamarin forms image gesture recognizers (3)

Xamarin.Forms es muy nuevo y muy emocionante, pero por ahora veo que tiene documentación limitada y algunas muestras. Estoy tratando de crear una aplicación con una interfaz similar a la de "MasterDetailPage", pero también tengo una vista desplegable derecha, no solo la izquierda.

He visto que esto no es posible utilizando la API actual, por lo que mi enfoque fue el siguiente:

  1. Crea una interfaz compartida de GestureRecognizer.
  2. En la aplicación de Android y en iOS, vincule esta interfaz al UIGestureRecognizer en iOS o al método OnTouch en el Android.

Para iOS, esto funciona, pero para Android, la escucha táctil sobre la actividad no parece funcionar.

¿Mi enfoque es bueno? Tal vez exista otro buen método para capturar eventos táctiles directamente desde el código compartido. ¿O tiene alguna idea de por qué la anulación pública de bool OnTouchEvent no funciona en una actividad de Android?


Le aconsejo que utilice el enfoque CarouselView, ya que puede utilizar soluciones ya existentes con la vista de carrusel que son compatibles con gestos de deslizamiento. Por lo tanto, como resultado, su vista se integrará en este control de vista de carrusel.


MasterDetailPage, y otros elementos compartidos, son solo contenedores para que los renderizadores de vistas puedan capturar. La mejor opción sería crear un LRMasterDetailPage personalizado (izquierda-derecha ..) y asignarle propiedades para DetailLeft y DetailRight Luego implementa un ViewRenderer personalizado por plataforma para este elemento personalizado.

El elemento:

public class LRMasterDetailPage { public View LeftDetail; public View RightDetail; public View Master; }

El renderizador:

[assembly:ExportRenderer (typeof(LRMasterDetailPage), typeof(LRMDPRenderer))] namespace App.iOS.Renderers { public class LRMDPRenderer : ViewRenderer<LRMasterDetailPage,UIView> { LRMasterDetailPage element; protected override void OnElementChanged (ElementChangedEventArgs<LRMasterDetailPage> e) { base.OnElementChanged (e); element = e.NewElement; // Do someting else, init for example } protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == "Renderer") return; base.OnElementPropertyChanged (sender, e); if (e.PropertyName == "LeftDetail") updateLeft(); if (e.PropertyName == "RightDetail") updateRight(); } private void updateLeft(){ // Insert view of DetailLeft element into subview // Add button to open Detail to parent navbar, if not yet there // Add gesture recognizer for left swipe } private void updateRight(){ // same as for left, but flipped } } }


Para el reconocedor de gestos de barrido de Xamarin.Forms, agregue SwipeGestureRecognizer

<BoxView Color="Teal" ...> <BoxView.GestureRecognizers> <SwipeGestureRecognizer Direction="Left" Swiped="OnSwiped"/> </BoxView.GestureRecognizers> </BoxView>

Aquí está el código C # equivalente:

var boxView = new BoxView { Color = Color.Teal, ... }; var leftSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Left }; leftSwipeGesture.Swiped += OnSwiped; boxView.GestureRecognizers.Add(leftSwipeGesture);

Para obtener más información, consulte aquí: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/gestures/swipe