gpt4 book ai didi

java - Topmost View 吞下触摸事件,因为重叠

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:07 26 4
gpt4 key购买 nike

这是我的布局结构:

- RelativeLayout (full screen)
- FrameLayout (full screen)
- Button (in the middle of the screen)
- RecyclerView (align parent bottom but with very big padding top to
capture the scrolling also in the top of the screen, so it's basically acting like a full screen `RecyclerView`)

是的,这些 View 相互重叠。

因为 RecyclerView 是最顶层的 View ,它捕获屏幕上的所有触摸事件,并吞下它们,防止任何触摸“通过它”到它下面的底层 View 。 (注意:对于底层 View ,我不是指 RecyclerView 的子级,而是其他 rootview 的 子级)

我已经阅读了大量关于传播触摸事件和防止吞咽触摸事件等的 stackoverflow 帖子,尽管这看起来很容易完成,但我无法实现以下效果:

我想让我的 RecyclerView 捕捉触摸事件,这样它就会滚动或发生其他情况。但我希望 rootView 认为 RecyclerView 没有捕获事件,并继续将它传递给它的其他子级(rootview'的 child )。

这是我尝试做的事情:

1。重写 RecyclerViewdispatchTouchEvent 以执行其逻辑并返回 false 以作为它没有分派(dispatch)其触摸事件的行为,因此 Root View 将继续迭代以通过其 subview 进行触摸。

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
super.dispatchTouchEvent(ev);
return false;
}

发生了什么:

RecyclerView 仍然有效,但仍然吞噬所有触摸事件(与以前一样)

2。重写 RecyclerViewonTouchEvent 以执行其逻辑并返回 false。 (注意:我知道这似乎不是解决方案,但我试过了)

@Override
public boolean onTouchEvent(MotionEvent e) {
super.onTouchEvent(e);
return false;
}

发生了什么:

与#1 相同的结果

我已经用同样的想法做了一些调整,但它们并没有奏效,所以我现在有点无能为力,希望得到你们的帮助!

最佳答案

我有两个建议给你:
第一个更简单,但假设您要单击 Button,它可以出现在 RecyclerView 上方,如果是这种情况,您可以只需更改布局的顺序:

- RelativeLayout (full screen)
- FrameLayout (full screen)
- RecyclerView
- Button (in the middle of the screen)

如果你需要更通用的东西,那么可以这样做:

recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int [] pos = new int[2];
recyclerView.getLocationOnScreen(pos);
Rect rect = new Rect();
button.getHitRect(rect);
if (rect.contains((int) event.getX() + pos[0], (int) event.getY() + pos[1])) {
button.onTouchEvent(event);
}
return false;
}
});

您将需要单独处理所有 View ,这不是很好,但在我的测试中有效。

注意:如果您已将 addOnItemTouchListener 添加到您的 RecyclerView,您将需要将上述功能添加到 onInterceptTouchEvent(或到两个地方,取决于您的项目和 RecyclerView)。

关于java - Topmost View 吞下触摸事件,因为重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44894937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com