【发布时间】:2017-12-07 06:36:27
【问题描述】:
这是我的布局结构:
- 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`)
所以是的,这些视图相互重叠。
RecyclerView 是最顶层视图的原因,它捕获屏幕上的所有触摸事件,并吞下它们,防止任何触摸“通过它”到达它下面的底层视图。 (注意:通过基本观点,我不是指RecyclerView 的孩子,而是其他rootview's 孩子)
我已经阅读了大量关于传播触摸事件和防止吞咽触摸事件等的 stackoverflow 帖子,尽管完成这项任务似乎很简单,但我无法实现以下效果:
我希望我的RecyclerView 捕获触摸事件,因此它会滚动或其他。但我希望rootView 认为RecyclerView 没有捕获事件,并继续将其传递给其他孩子(rootview'
的孩子)。
这是我尝试做的事情:
1。覆盖 RecyclerView 的 dispatchTouchEvent 以执行其逻辑并返回 false 以作为它没有调度其触摸事件的行为,因此 rootview 将继续通过其子视图迭代触摸。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
super.dispatchTouchEvent(ev);
return false;
}
发生了什么:
RecyclerView 仍然有效,但仍会吞噬所有触摸事件(与以前一样)
2。覆盖RecyclerView 的onTouchEvent 以执行其逻辑并返回false。 (注意:我知道这似乎不是解决方案,但我尝试过)
@Override
public boolean onTouchEvent(MotionEvent e) {
super.onTouchEvent(e);
return false;
}
发生了什么:
结果与 #1 相同
我用同样的想法做了更多的调整,但效果不佳,所以我现在有点无能为力,希望能得到你们的帮助!
【问题讨论】:
标签: java android android-layout android-view android-custom-view