Android onClick 阻塞 onFling

标签 android android-activity onclick gesture-recognition

我有一个 Activity,它实现了一个手势检测器来捕捉用户的快速输入以导航到其他屏幕。这工作正常 - 但是 - 我最近更新了一个派生自 BaseActivity 的类以添加一个 onClick 函数,现在该点击事件似乎阻止了 onFling 被击中。 onClick 绑定(bind)到屏幕上的 TextView 区域(在 LinearLayout 中)。 resultsClick 方法使用其在 XML 布局中的 onClick 属性连接到 TextView。

我曾尝试更改 onSingleTapUp 和 onDown 中的返回值,但没有成功。我也尝试过向下面的所有函数添加日志语句。当我在 TextView 区域中滑动时,它们都不会触发,但它们会在屏幕的其他区域触发。

也许我使用了错误的搜索词,但我似乎找不到解决这个问题的示例 - 但我确信这个问题之前已经解决了。

public class DerivedActivity extends BaseActivity
{
   ...
   /**
    * resultsClick - The user clicked on the Results area
    * @param v
    */
   public void resultsClick(View v)
   {
      try
      {
         Log.i(this.toString(), "resultsClick");
         startActivity(new Intent(this, Results_TabHost.class ));
      }
      catch (Exception e)
      {
         Log.e(this.toString(), "Exception" + e.toString());
      }

   }// end resultsClick
   ...
}

这里是实现GestureListener代码的基类

public class BaseActivity extends    ActivityGroup 
                          implements OnGestureListener
{
   ...
   private static final int SWIPE_MIN_DISTANCE = 120;
   private static final int SWIPE_MAX_OFF_PATH = 250;
   private static final int SWIPE_THRESHOLD_VELOCITY = 200;

   public boolean onFling(MotionEvent e1, 
                          MotionEvent e2, 
                          float velocityX, 
                          float velocityY)
   {
      try
      {
         Log.i(this.toString(), "onFling");

         // jump right out if not a swipe/fling
         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 )
         {
            Log.i(this.toString(), "fling left");
            rightArrowClick(null);

         }
         else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && 
                  Math.abs(velocityX)   > SWIPE_THRESHOLD_VELOCITY )
         {
            Log.i(this.toString(), "fling right");
            leftArrowClick(null);
         }
      }
      catch (Exception e)
      {
         Log.e(this.toString(), "Exception" + e.toString());
      }

      return true;

   }// end onFling

   // These next methods we are required to have - even if unused - 
   // in order for the Gesture Handling to work

   @Override
   public boolean onTouchEvent(MotionEvent motionEvent)
   {
      return this.gestureDetector.onTouchEvent(motionEvent);
   }

   @Override
   public void onLongPress(MotionEvent e)
   {
      // Intentionally not handling - must be overridden by listener class
   }

   @Override
   public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
   {
      // Intentionally not handling - must be overridden by listener class
      // Intentionally returning true - per code examples
      return true;
   }

   @Override
   public void onShowPress(MotionEvent e)
   {
      // Intentionally not handling - must be overridden by listener class
   }

   @Override
   public boolean onSingleTapUp(MotionEvent e)
   {
      // Intentionally not handling - must be overridden by listener class
      // Intentionally returning true - per code examples
      return true;
   }

   @Override
   public boolean onDown(MotionEvent e)
   {
      // Intentionally not handling - must be overridden by listener class
      // Intentionally returning true - per code examples
      return true;
   }
...
}

最佳答案

您对 onTouchEvent 的实现不正确。 您只需返回 gestureDector 结果的值。

如果您的手势检测器没有检测到任何手势,您就会告诉调用者“我在这里没有任何事可做”并且触摸事件将永远不会发送给 Activity 的子级。

如果您的手势检测器没有处理该事件,您需要调用 super.onTouchEvent()

@Override
public boolean onTouchEvent(MotionEvent motionEvent)
{
  if(this.gestureDetector.onTouchEvent(motionEvent))
  {
      return true;
  }
  //no gesture detected, let Activity handle touch event
  return super.onTouchEvent(motionEvent);
}

关于Android onClick 阻塞 onFling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4249036/

相关文章:

android - 通过 Intent 将 BluetoothDevice 对象传递给另一个 Activity

java - 文本出现在启动屏幕后

android - 启动新的撰写项目时出错 java.lang.AbstractMethodError

android ui - 周围是否有任何 android 向导框架?

java - 为什么我的数据包没有发送到我的其他 Activity ?

android - 为什么这会耗尽内存?不应该发布 Activity 吗?

javascript - 单击联系表单字段时图像发生变化

android - 单击按钮时更改按钮的 drawableLeft

javascript - onclick() 函数不运行代码

android - 如何创建由少数应用程序共享的 sharedpref?