首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android --如何检测屏幕上的触摸是“滚动”触摸?

Android --如何检测屏幕上的触摸是“滚动”触摸?
EN

Stack Overflow用户
提问于 2016-02-09 13:17:43
回答 7查看 16.9K关注 0票数 8

我正在用Java创建一个安卓应用程序,在这个应用程序中,我的屏幕上有很多<TextView>,它们都定义了onTouchListeners。它们被包装在一个<ScrollView>中,因为它们占用的空间比屏幕上可用的空间多。

我的问题是:当我向上/向下滚动应用程序时,通过触摸屏幕并上下移动手指,卷轴工作正常,但触屏<TextView><TextView>也会被触发(这可能也是预期的)--不过我不希望这种情况发生。当我触摸屏幕滚动时,我希望onTouchListener被忽略。

我怎样才能做到这一点?我不希望在用户滚动并“意外”在特定的onTouchListener上触发<TextView>时运行我的函数。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-02-11 03:01:14

在搜索了更多之后,我找到了Stimsoni的这个解决方案。这样做的目的是检查ACTION_DOWNACTION_UP事件之间的时间是否低于或高于ViewConfiguration.getTapTimeout()给出的值。

从文件中:

返回持续时间(以毫秒为单位),我们将等待一个触摸事件是一个点击还是滚动。如果用户没有在此间隔内移动,则认为它是一个抽头。

代码:

代码语言:javascript
运行
复制
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;
    }

});
票数 21
EN

Stack Overflow用户

发布于 2016-11-19 20:35:34

我和你有同样的问题,我用ACTION_CANCEL解决了这个问题。

当以前感觉到的动作(如您的示例中的motionEvent.getActionMasked() )现在被滚动等其他手势“取消”时,motionEvent.getActionMasked()等于ACTION_CANCEL,您的代码可能如下:

代码语言:javascript
运行
复制
view.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent e) {
        if (e.getActionMasked() == MotionEvent.ACTION_DOWN) {
            // perceive a touch action.
        } else if(e.getActionMasked() == MotionEvent.ACTION_UP ||
                e.getActionMasked() == MotionEvent.ACTION_CANCEL) {
            // ignore the perceived action.      
        }
    }

我希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2019-10-19 13:02:53

我也遇到了类似的问题,但是有了一个TextView,搜索把我带到了这里。文本内容可能会占用比屏幕上可用空间更多的空间。简单工作示例:bpmcounter android (Kotlin)

代码语言:javascript
运行
复制
class MainActivity : AppCompatActivity() {

    inner class GestureTap : GestureDetector.SimpleOnGestureListener() {
        override fun onSingleTapUp(e: MotionEvent?): Boolean {
            // Do your buttonClick stuff here. Any scrolling action will be ignored
            return true
        }
    }

    @SuppressLint("ClickableViewAccessibility")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val textView = findViewById<TextView>(R.id.textView)
        textView.movementMethod = ScrollingMovementMethod()
        val gestureDetector = GestureDetector(this, GestureTap())
        textView.setOnTouchListener { _, event -> gestureDetector.onTouchEvent(event) }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35293125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档