2010-12-29 5 views
1

Quelqu'un aurait-il un exemple d'utilisation de GestureListner avec Monodroid? Je n'arrive pas à traduire avec succès ce qui est sur le Net en utilisant Java.Android - Impossible d'activer l'OnTouchEvent dans Activity - en utilisant MonoDroid (Need the MotionEvent d'OnTouch)

Je pense que je suis proche ... Et je pense que si je peux déclencher ce "OnTouchEvent", je pourrais à mon tour déclencher mon OnTouchEvent de la classe GestureDetector, et alors je serais capable d'obtenir le mouvement de balayage (ou OnFling).

Que dois-je faire pour déclencher cet événement dans ma classe d'activité? Non

public override bool OnTouchEvent(MotionEvent e) 
{ 
     m_gestureDetector.OnTouchEvent(e); 

     return base.OnTouchEvent(e); 
} 

Et je pense que j'ai absolument besoin de l'événement OnTouch au lieu d'OnClick parce que j'ai besoin de MotionEvent.

Répondre

4

Selon les docs Android pour OnTouchEvent:

Appelé lorsqu'un événement d'écran tactile n'a pas été traitée par l'une des vues en dessous. Ceci est très utile pour traiter les événements tactiles qui se produisent en dehors des limites de votre fenêtre, où il n'y a pas de vue pour le recevoir. Etes-vous sûr de ne pas le manipuler dans une vue?

Ma conjecture est probablement devrait gérer dans votre vue.

0

Fondamentalement, vous devez appeler le remplacement de l'OnTouchEvent de l'activité. Je pense que c'est là que tu t'es trompé. Voici un exemple de comment je l'ai fait. J'espère que cela aide.

public class Activity1 : Activity 
{ 
    private TextView displayText; 
    private GestureDetector gestureScanner; 
    private GestureListener gestureListener; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     SetContentView(Resource.layout.main); 

     displayText = FindViewById<TextView>(Resource.id.textView); 

     gestureListener = new GestureListener(displayText); 
     gestureScanner = new GestureDetector(this, gestureListener); 
    } 

    public override bool OnTouchEvent(MotionEvent e) 
    { 
     return gestureScanner.OnTouchEvent(e); 
    } 
} 

public class GestureListener : GestureDetector.IOnGestureListener 
{ 
    private readonly TextView view; 
    private static int SWIPE_MAX_OFF_PATH = 250; 
    private static int SWIPE_MIN_DISTANCE = 120; 
    private static int SWIPE_THRESHOLD_VELOCITY = 200; 

    public GestureListener(TextView view) 
    { 
     this.view = view; 
    } 

    public IntPtr Handle 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public bool OnDown(MotionEvent e) 
    { 
     view.Text = "- DOWN -"; 
     return true; 
    } 

    public bool OnFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
    { 
     try 
     { 
      if (Math.Abs(e1.GetY() - e2.GetY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      // right to left swipe 
      if (e1.GetX() - e2.GetX() > SWIPE_MIN_DISTANCE && Math.Abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) 
       Toast.MakeText(view.Context, "Left Swipe", ToastLength.Short).Show(); 
      else if (e2.GetX() - e1.GetX() > SWIPE_MIN_DISTANCE && Math.Abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) 
       Toast.MakeText(view.Context, "Right Swipe", ToastLength.Short).Show(); 
     } 
     catch (Exception e) 
     { 
      // nothing 
     } 
     return false; 
    } 

    public void OnLongPress(MotionEvent e) 
    { 
     view.Text = "- LONG PRESS -"; 
    } 

    public bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 
    { 
     view.Text = "- FLING -"; 
     return true; 
    } 

    public void OnShowPress(MotionEvent e) 
    { 
     view.Text = "- SHOW PRESS -"; 
    } 

    public bool OnSingleTapUp(MotionEvent e) 
    { 
     view.Text = "- SINGLE TAP UP -"; 
     return true; 
    } 
} 
Questions connexes