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(この);

「ここ」は、OnDoubleTapEventが上記の行と同じクラスに実装されていることを意味します。

+0

私はすべてのジェスチャーを消費するレイアウトをラップするスクロールビューを持っていたので、なぜ動作していないのか分かりました。だから私はこれを解決しようとしています。このSetOnDoubleTapListenerはどこに実装すれば同じファイル内の別のメソッドですか? – chobo2

+0

はい、同じクラスに実装できます。あなたのコードによれば、代わりにGestureListenerクラスに実装することができます。 –

関連する問題