【问题标题】:Android - Can't get the OnTouchEvent to fire in Activity - using MonoDroid (Need the MotionEvent from OnTouch)Android - 无法在 Activity 中触发 OnTouchEvent - 使用 MonoDroid(需要来自 OnTouch 的 MotionEvent)
【发布时间】:2011-06-01 04:01:10
【问题描述】:

会有人碰巧有一个将 GestureListner 与 Monodroid 结合使用的工作示例吗?我似乎无法使用 Java 成功翻译网络上的内容。

我想我已经接近了......而且我认为如果我可以让这个“OnTouchEvent”触发,我可以反过来让我的 GestureDetector 类的 OnTouchEvent 触发,然后我就能获得滑动动作(或 OnFling)。

我需要做什么才能让这个事件在我的 Activity 类中触发?没有

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

      return base.OnTouchEvent(e);
}

而且我认为我肯定需要 OnTouch 事件而不是 OnClick,因为我需要 MotionEvent。

【问题讨论】:

    标签: android touch-event xamarin.android gesturedetector


    【解决方案1】:

    根据OnTouchEvent 的 Android 文档:

    当触摸屏事件未被任何视图处理时调用 在它下面。这对于处理发生的触摸事件最有用 在您的窗口范围之外,没有视图可以接收它。

    您确定不是在视图中处理它吗?我的猜测是你可能应该在你的观点中处理它。

    【讨论】:

      【解决方案2】:

      基本上你需要在Activity上调用重写OnTouchEvent。我认为这就是你弄错的地方。这是我如何做到的一个例子。希望能帮助到你。

      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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 2012-01-26
        • 2022-06-19
        相关资源
        最近更新 更多