Android 除了滑动手势外,如何在surfaceview上进行单触式操作?

Android 除了滑动手势外,如何在surfaceview上进行单触式操作?,android,surfaceview,swipe,Android,Surfaceview,Swipe,我使用的是surfaceview,我只需要识别向上/向下的手指滑动。 我发现这很有用: 但是,我还希望在用户单击surfaceview(仅单击一次)时调用给定的函数,比如Foo()。这很简单,但当我添加了手势滑动的东西时,它变得非常复杂 有人知道如何做到这两个:单触事件和上/下手指滑动吗 以下是我尝试过的: 内部OnSwipeTouchListener: public boolean onTouch(View v, MotionEvent event) { Foo(); ret

我使用的是surfaceview,我只需要识别向上/向下的手指滑动。 我发现这很有用:

但是,我还希望在用户单击surfaceview(仅单击一次)时调用给定的函数,比如Foo()。这很简单,但当我添加了手势滑动的东西时,它变得非常复杂

有人知道如何做到这两个:单触事件和上/下手指滑动吗

以下是我尝试过的:

  • 内部OnSwipeTouchListener:

    public boolean onTouch(View v, MotionEvent event) {
        Foo();
        return gestureDetector.onTouchEvent(event);
    }
    
    但这导致从用户开始手势的那一刻起调用Foo(),直到手指从屏幕上松开为止(数百次)

  • 我还尝试丢弃这个OnSwipeTouchListener类,并在曲面视图本身内部使用onTouchEvent()。这适用于单触式事件;但是,我无法检测到向上/向下滑动

     if (event.getAction() == MotionEvent.ACTION_DOWN) {
          mDownY = event.getY();
     }
     else if (event.getAction() == MotionEvent.ACTION_UP) {
        // This code was never called!!
     }
    
    • 这可能会有所帮助

      1) 让您的
      活动
      实现
      手势检测器.onTestureListener


      2) 添加一行,如
      gDetector=new gesturedector(getBaseContext(),this)活动
      onCreate()
      中的code>

      3) 覆盖属于
      手势检测器的六种方法中的部分/全部方法

      @Override
      public boolean onDown(MotionEvent arg0) {
          return false;
      }
      @Override
      public boolean onFling(MotionEvent start, MotionEvent finish, float xVelocity, float yVelocity) {
          if (start.getRawY() < finish.getRawY()) {
              Log.d( TAG, "Swiped down!" );
          } else {
              Log.d( TAG, "Swiped up!" );
          }
          return true;
      }
      @Override
      public void onLongPress(MotionEvent arg0) {
      }
      @Override
      public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) {
          return false;
      }
      @Override
      public void onShowPress(MotionEvent arg0) {
      }
      @Override
      public boolean onSingleTapUp(MotionEvent arg0) {
          Log.d( TAG, "Just tapped at " + arg0.getRawX() + "," + arg0.getRawY() + "!" );
          return false;
      }
      
      (4) 这很重要!否则,手势检测器将无法启动

      这一点得到了越来越多的解释;我只是做了一点简化


      ETA:第一个链接来自androidsnippets.com(不知道作者是谁),该链接本身的内容改编自anddev.org,原作者“Danuubz”。不推荐使用的构造函数(已在上面合并)的修复程序来自androidsnippets.com上的用户“rurussell00”。第二个链接来自William J.Francis。

      你能想出解决方案吗?下面的答案有用吗?
      @Override
      public boolean onTouchEvent(MotionEvent me) {
          return gDetector.onTouchEvent(me);
      }