滚动视图:将触摸事件传递给子组件

5
我用一个ImageView制作了一个“摇杆”。它在一个ScrollView中。在没有ScrollView的情况下,它可以工作,但是在ScrollView中,它无法接收垂直移动的TouchEvents。我该如何阻止ScrollView阻塞触摸事件?
3个回答

6
我在这里找到了一个解决方案:链接
我创建了一个自定义的ScrollView类,其中包含一个布尔值,指示它是否被锁定。onInterceptTouchEvent方法被重写:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (!mScrollable) return false;
    return super.onInterceptTouchEvent(ev);
}

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

6
您需要根据需要切换此功能的开启和关闭。
getParent().requestDisallowInterceptTouchEvent(true)。
我不确定为什么您要在滚动视图中放置摇杆,摇杆也应该随着视图滚动吗?如果是这样想的话,上面的方法是最好的解决方案。如果它不应该随着视图滚动,我会帮助您找到更好的方法来包含摇杆在您的视图中。

无论我对 ScrollView 还是它的父级是否传入 true 或 false,都没有任何效果。我需要一个 ScrollView,因为用户可以添加多个操纵杆。禁用 ImageView 的滚动应该没问题,但我希望 ScrollView 在触摸其他视图时可滚动。 - Toast
没有效果?你应该调用joystickView.getParent().requestDisallowInterceptTouchEvent(true)... 你是这样调用的吗?看一下这个帖子:This。我不同意最高评分答案的优雅程度,但那也可以完成工作。 - Brandon Romano
好的,我按照链接中的方式进行了实现。现在它不再滚动了。但是ImageView仍然无法检测到垂直移动(而水平移动可以被检测到)。 - Toast

-1
简单的答案在这里: https://dev59.com/qYPba4cB1Zd3GeqPozPm#34436589 通过使用以下方式声明您的ScrollView不可点击/无法获得焦点
android:clickable="false" and android:focusable="false"

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接