【问题标题】:ScrollView: Pass touch events to childrenScrollView:将触摸事件传递给孩子
【发布时间】:2013-01-26 16:55:57
【问题描述】:

我用ImageView 做了一个“操纵杆”。它位于ScrollView 内。

它可以在没有ScrollView 的情况下工作,但在ScrollView 内它不会接收TouchEvents 进行垂直移动。

如何阻止ScrollView 阻止触摸事件?

【问题讨论】:

    标签: java android scrollview


    【解决方案1】:

    我找到了解决方案here

    我创建了一个自定义的 ScrollView 类,它有一个布尔值来指示它是否被锁定。 onInterceptTouchEvent 方法被覆盖:

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (!mScrollable) return false;
        return super.onInterceptTouchEvent(ev);
    }
    

    当操纵杆被触摸时(ACTION_DOWN),自定义的 ScrollView 被锁定。在 ATCTION_UP 事件中它被解锁。

    【讨论】:

      【解决方案2】:

      你会想要根据需要打开和关闭它..

      getParent().requestDisallowInterceptTouchEvent(true).

      我不完全确定您为什么在滚动视图中有操纵杆,操纵杆是否也应该随着视图滚动?如果这是预期的,那么上面的路线将是最好的解决方案。如果它不应该随着视图滚动,我会帮助您制定一个更好的方法,将操纵杆包含在您的视图中。

      【讨论】:

      • 无论我为 ScrollView 还是它的父级调用它,无论是真还是假,这都没有效果。我需要一个 ScrollView,因为用户可以根据需要添加任意数量的操纵杆。可以禁用 ImageView 的滚动,但我希望 ScrollView 可以滚动触摸其他视图。
      • 没有效果?你应该叫它joystickView.getParent().requestDisallowInterceptTouchEvent(true)... 你是这样称呼它的吗?看看This 的帖子。我不同意评分最高的答案的优雅,但这也应该能起到作用。
      • 好的,我在链接中实现了它。现在它不再滚动了。但是 ImageView 仍然没有检测到垂直移动(虽然检测到水平移动)。
      【解决方案3】:

      简单的答案在这里: https://stackoverflow.com/a/34436589/3818437

      通过使用声明您的 ScrollView 不可点击/可聚焦

      android:clickable="false" and android:focusable="false"
      

      v.setClickable(false) and v.setFocusable(false)

      现在应该将点击事件分派给 ScrollView 的父级。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-18
        • 2016-06-04
        • 1970-01-01
        • 2015-10-04
        • 2011-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多