Android onClick阻止onFling

前端之家收集整理的这篇文章主要介绍了Android onClick阻止onFling前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Activity,它实现了一个Gesture Detector来捕获用户输入导航到其他屏幕的输入.这工作正常 – 但是 – 我最近更新了一个派生自BaseActivity的类来添加onClick函数,现在click事件似乎阻止onFling被击中. onClick与我在屏幕上的TextView区域(在LinearLayout中)相关联. resultsClick方法使用 XML布局中的onClick属性连接到TextView.

我试过在没有运气的情况下更改onSingleTapUp和onDown的返回值.我也尝试过将log语句添加到下面的所有函数中.当我在TextView区域中投掷时,它们都不会触发,但它们会在屏幕的其他区域上触发.

也许我使用了错误搜索词,但我似乎无法找到解决这个问题的例子 – 但我确信此问题已经解决过了.

  1. public class DerivedActivity extends BaseActivity
  2. {
  3. ...
  4. /**
  5. * resultsClick - The user clicked on the Results area
  6. * @param v
  7. */
  8. public void resultsClick(View v)
  9. {
  10. try
  11. {
  12. Log.i(this.toString(),"resultsClick");
  13. startActivity(new Intent(this,Results_TabHost.class ));
  14. }
  15. catch (Exception e)
  16. {
  17. Log.e(this.toString(),"Exception" + e.toString());
  18. }
  19.  
  20. }// end resultsClick
  21. ...
  22. }

这是实现GestureListener代码的基类

  1. public class BaseActivity extends ActivityGroup
  2. implements OnGestureListener
  3. {
  4. ...
  5. private static final int SWIPE_MIN_DISTANCE = 120;
  6. private static final int SWIPE_MAX_OFF_PATH = 250;
  7. private static final int SWIPE_THRESHOLD_VELOCITY = 200;
  8.  
  9. public boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY)
  10. {
  11. try
  12. {
  13. Log.i(this.toString(),"onFling");
  14.  
  15. // jump right out if not a swipe/fling
  16. if (Math.abs( e1.getY() - e2.getY() ) > SWIPE_MAX_OFF_PATH)
  17. {
  18. return false;
  19. }
  20.  
  21. // right to left swipe
  22. if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE &&
  23. Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY )
  24. {
  25. Log.i(this.toString(),"fling left");
  26. rightArrowClick(null);
  27.  
  28. }
  29. else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&
  30. Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY )
  31. {
  32. Log.i(this.toString(),"fling right");
  33. leftArrowClick(null);
  34. }
  35. }
  36. catch (Exception e)
  37. {
  38. Log.e(this.toString(),"Exception" + e.toString());
  39. }
  40.  
  41. return true;
  42.  
  43. }// end onFling
  44.  
  45. // These next methods we are required to have - even if unused -
  46. // in order for the Gesture Handling to work
  47.  
  48. @Override
  49. public boolean onTouchEvent(MotionEvent motionEvent)
  50. {
  51. return this.gestureDetector.onTouchEvent(motionEvent);
  52. }
  53.  
  54. @Override
  55. public void onLongPress(MotionEvent e)
  56. {
  57. // Intentionally not handling - must be overridden by listener class
  58. }
  59.  
  60. @Override
  61. public boolean onScroll(MotionEvent e1,float distanceX,float distanceY)
  62. {
  63. // Intentionally not handling - must be overridden by listener class
  64. // Intentionally returning true - per code examples
  65. return true;
  66. }
  67.  
  68. @Override
  69. public void onShowPress(MotionEvent e)
  70. {
  71. // Intentionally not handling - must be overridden by listener class
  72. }
  73.  
  74. @Override
  75. public boolean onSingleTapUp(MotionEvent e)
  76. {
  77. // Intentionally not handling - must be overridden by listener class
  78. // Intentionally returning true - per code examples
  79. return true;
  80. }
  81.  
  82. @Override
  83. public boolean onDown(MotionEvent e)
  84. {
  85. // Intentionally not handling - must be overridden by listener class
  86. // Intentionally returning true - per code examples
  87. return true;
  88. }
  89. ...
  90. }

解决方法

您的onTouchEvent实现不正确.
您只需返回gestureDector结果的值即可.

但是,如果您的手势检测器未检测到任何手势,则告诉来电者“我这里没有任何事情可做”,触摸事件将永远不会发送给活动的孩子.

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

  1. @Override
  2. public boolean onTouchEvent(MotionEvent motionEvent)
  3. {
  4. if(this.gestureDetector.onTouchEvent(motionEvent))
  5. {
  6. return true;
  7. }
  8. //no gesture detected,let Activity handle touch event
  9. return super.onTouchEvent(motionEvent);
  10. }

猜你在找的Android相关文章