- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
根据 android training如果您扩展 GestureDetector.SimpleOnGestureListener
,并从 onDown(...)
返回 false
而不是 GestureDetector.SimpleOnGestureListener< 的其他方法
永远不会被调用:
Whether or not you use GestureDetector.OnGestureListener, it's best practice to implement an onDown() method that returns true. This is because all gestures begin with an onDown() message. If you return false from onDown(), as GestureDetector.SimpleOnGestureListener does by default, the system assumes that you want to ignore the rest of the gesture, and the other methods of GestureDetector.OnGestureListener never get called. This has the potential to cause unexpected problems in your app. The only time you should return false from onDown() is if you truly want to ignore an entire gesture.
但是,在我的简单测试中 onScroll(...)
被调用了。
public void onCreate(Bundle savedInstanceState) {
mDetector = new GestureDetectorCompat(this, MyGestureListener);
}
public boolean onTouchEvent(MotionEvent event) {
mDetector.onTouchEvent(event);
return true;
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
private boolean scrollEvent;
@Override
public boolean onDown (MotionEvent event) {
Log.v("GESTURE", "onDown ");
return false;
}
@Override
public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.v("GESTURE", "onScroll");
return true;
}
另一个类似的问题是下一个定义,同样来自同一个android培训页面:
a return value of true from the individual on methods indicates that you have handled the touch event. A return value of false passes events down through the view stack until the touch has been successfully handled.
这与之前的报价如何结算?
最佳答案
The only time you should return false from onDown() is if you truly want to ignore an entire gesture.
这几乎说明了一切。
重点是 onDown(...)
方法接收一个 MotionEvent
作为参数,您可以选择分析 MotionEvent
在 onDown(...)
方法中,如果它不是您想要处理的内容,则返回 false
。
MotionEvent
包含大量详细信息,包括手势开始的位置(例如)- 如果它在您要处理的区域之外,则返回 false
否则返回 true
。
如果您从 onDown(...)
返回 true
,则将调用其他方法。这些方法中的每一个都可以选择分析和处理传递给它们的各种参数。如果您在这些方法中的任何一个中处理一个事件并且不希望任何进一步的操作,那么从这些方法返回 true 否则将调用其他方法(可能在父类(super class)中,具体取决于您的代码实现)。
手势很复杂,涉及上下 Action 以及任何方向的移动。允许拒绝手势的选项(通过在 onDown(...)
中返回 false
)使事情变得更加通用。
编辑:在某些情况下,您可能会在屏幕上看到多个 View 。传递给 onDown(...)
的 MotionEvent
将包含有关手势开始位置的信息。如果您不希望屏幕的某些区域对手势使用react,则在检查手势的起始位置后返回 false
。
关于android - OnGestureListener.onDown()返回false的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23122411/
根据 android training如果您扩展 GestureDetector.SimpleOnGestureListener,并从 onDown(...) 返回 false 而不是 Gesture
当用户关闭键盘上的向下按钮时,我想隐藏我的编辑文本.. 尝试-1 我试过 KeycodeBack 但这不起作用 @Override public boolean onKeyDown(int keyC
我有方法用文本显示 toast 。我在 GetureDetector 的方法 onDown() 中调用此方法 @Override public boolean onDown(MotionEvent m
我的 onScroll 和 onTouchEvent 被调用,但不是 onDown 方法。事实上,当我在 onDown 中记录 distaceX 时,我会注销其中的几个,第一个总是相对于我上次滚动结束
我遇到了一个问题,需要以与 Phaser.Key.reset 相同的方式重置 game.input.onDown 事件。 。似乎这可以通过 Phaser.Pointer.reset 来实现。方法。不幸
我正在研究 android 中的手势 Activity 我使用类来检测滑动 Action 是 public class ActivitySwipeDetector implements View.O
我正在尝试在我的自定义 View 中使用 onScroll 方法。onDown 和 onLongPress 工作,但为什么我的 onScroll 或 onFling 或 onDoubleTap 不工作
这是 JSFiddle . 我这里有两个事件。 game.input.onDown 执行一些逻辑(在我的示例中生成粒子) 是textButton.events.onInputDown,其中textBu
我是一名优秀的程序员,十分优秀!