Xamarin.Formulaires reconnaissance des gestes par balayage

Xamarin.Les formulaires sont très nouveaux et très intéressants, mais pour l'instant je vois qu'il a peu de documentation et quelques échantillons. J'essaie de faire une application avec une interface similaire à celle de "MasterDetailPage", mais aussi avec une vue de droite, pas seulement celle de gauche.

j'ai vu que ce n'est pas possible en utilisant L'API actuelle, et donc mon approche était celle-ci:

  1. créer une interface GestureRecognizer partagée.
  2. dans Android app et iOS dans bind ceci interface avec le UIGestureRecognizer sur iOS ou la méthode OnTouch sur l'android.

pour iOS cela fonctionne mais pour Android l'écouteur tactile sur l'activité ne semble pas fonctionner.

mon approche est bonne? Peut-être qu'il y a une autre bonne méthode pour capturer les événements tactiles directement à partir du code partagé? Ou avez-vous une idée pourquoi le public outrepasser bool OnTouchEvent ne fonctionne pas dans une activité Androïde?

18
demandé sur user3279360 2014-05-30 15:25:40

2 réponses

la page Masterdetail, et d'autres éléments partagés, sont juste des conteneurs pour les rendus de vue à ramasser. La meilleure option serait de créer une page Lrmasterdetail personnalisée (gauche-droite..) et lui donner des propriétés pour DetailLeft et DetailRight. Ensuite, vous implémentez un ViewRenderer personnalisé par plate-forme pour cet élément personnalisé.

L'élément:

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

Le moteur de rendu:

[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
        }
    }
}
0
répondu Herman 2014-07-26 11:38:12

je vous conseille d'utiliser l'approche Carrouselview, F. E. vous pouvez utiliser des solutions déjà existantes avec vue carrousel qui sont des gestes de glissement de supports. Ainsi, votre vue sera enveloppée dans ce contrôle de vue carrousel

0
répondu Damir Beylkhanov 2017-06-01 09:54:33