Android - 如何检测屏幕上的触摸是一种"滚动"触摸?

Ped*_*o A 4 java android android-scrollview android-touch-event

我正在用Java创建一个Android应用程序,我<TextView>在屏幕上有很多,所有这些都定义了onTouchListeners.它们被包裹在一起,<ScrollView>因为它们占据的空间比屏幕上的空间大.

我的问题是:当我向上/向下滚动应用程序时,通过触摸屏幕并向上/向下移动我的手指,滚动按预期工作,但触摸的onTouchListener <TextView>也被触发(这也可能是预期的) -我不希望这发生.我想在触摸屏幕滚动它时忽略onTouchListener.

我怎么能做到这一点?我不想让我的函数在用户滚动时运行,并且"意外地"触发某个onTouchListener <TextView>.

Ped*_*o A 15

经过更多搜索,我找到了Stimsoni的解决方案.我们的想法是检查ACTION_DOWNACTION_UP事件之间的时间是否低于或高于给定的值ViewConfiguration.getTapTimeout().

从文档:

[返回]我们将等待查看触摸事件是点击还是滚动的持续时间(以毫秒为单位).如果用户未在此间隔内移动,则将其视为点击.

码:

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;
    }

});
Run Code Online (Sandbox Code Playgroud)