我正在用 Java 创建一个 Android 应用程序,其中有很多<TextView>
屏幕周围,所有这些都定义了 onTouchListeners。它们被包裹在一个<ScrollView>
因为它们占据的空间超出了屏幕的可用空间。
我的问题是:当我通过触摸屏幕并向上/向下移动手指向上/向下滚动应用程序时,滚动按预期工作,但触摸的 onTouchListener<TextView>
也被解雇了(这可能也是预期的) - 但我不希望这种情况发生。我希望当我触摸屏幕滚动它时 onTouchListener 被忽略。
我怎样才能做到这一点?我不希望我的函数在用户滚动并“意外”在某个特定位置上触发 onTouchListener 时运行<TextView>
.
经过更多搜索后,我发现这个解决方案 https://stackoverflow.com/questions/9965695/how-to-distinguish-between-move-and-click-in-ontouchevent/15799372#15799372史汀索尼.这个想法是检查之间的时间是否ACTION_DOWN
and ACTION_UP
events 低于或高于给定的值ViewConfiguration.getTapTimeout()
.
从文档中:
[返回] 我们将等待查看触摸事件是点击还是滚动的持续时间(以毫秒为单位)。如果用户在此间隔内没有移动,则视为点击。
Code:
view.setOnTouchListener(new OnTouchListener() {
private long startClickTime;
@Override
public boolean onTouch(View view, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
startClickTime = System.currentTimeMillis();
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (System.currentTimeMillis() - startClickTime < ViewConfiguration.getTapTimeout()) {
// Touch was a simple tap. Do whatever.
} else {
// Touch was a not a simple tap.
}
}
return true;
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)