2011-08-04 23 views
0

我想玩手势,但我无法让他们工作。MonoDroid手势不适合我

我有这个

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 

namespace Myapp 
{ 
    [Activity(Label = "My Activity")] 
    public class AboutActivity : Activity 
    { 
     private TextView displayText; 
     private GestureDetector gestureScanner; 
     private GestureListener gestureListener; 

     protected override void OnCreate(Bundle bundle) 
     { 
      RequestWindowFeature(WindowFeatures.NoTitle); 
      base.OnCreate(bundle); 
      SetContentView(Resource.Layout.About); 


      displayText = FindViewById<TextView>(Resource.Id.Privacy); 

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


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


     } 
    } 

    public class GestureListener : GestureDetector.SimpleOnGestureListener 
    { 
     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; 
     } 
    } 

} 

没什么每个触发器。

回答

1

除了创建GestureDetector你可能会错过分配的手势事件GestureDetector,例如:

gestureDetector.SetOnDoubleTapListener(本);

请注意,此处的“this”表示OnDoubleTapEvent与上面的行在相同的类中实现。

+0

我想通了它为什么不能正常工作,这是因为我有一个滚动视图来包装我的布局,消耗所有的手势。所以现在我正试图解决这个问题。你会在哪里实现这个SetOnDoubleTapListener它只是在同一个文件中的另一种方法? – chobo2

+0

是的,它可以在同一个类中实现。根据你的代码,你可以在GestureListener类中实现它。 –