gpt4 book ai didi

android - 将触摸事件从 NestedScrollView 传递到父 View

转载 作者:行者123 更新时间:2023-12-02 03:08:26 24 4
gpt4 key购买 nike

我在 NestedScrollView 宽度下方有一个 ViewPager 一些顶部填充,以及 clipToPadding(false) 和透明背景(如图像)。

我的 ViewPager 无法获得触摸事件并且不起作用。

我怎么解决这个问题?

(我无法更改结构,也无法将 ViewPager 移动到 NestedScrollView 的上方或将 TopMargin 设置为 NestedScrollView)

ViewPager below a transparent NestedScrollView

ViewPager below a transparent NestedScrollView

嵌套 ScrollView

nestedScrollView = new NestedScrollView(getContext());
nestedScrollView.setFillViewport(true);
nestedScrollView.setLayoutParams(scrollParams);
nestedScrollView.setClipToPadding(false);

解决方案:

通过覆盖 NestedScrollView 和覆盖 onTouchEvent 解决了这个问题。
(感谢 @petrumo )
public class MyNestedScrollView extends NestedScrollView {
private boolean topZone = false;

public MyNestedScrollView(Context context) {
super(context);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_DOWN ){
topZone = (getPaddingTop() - getScrollY() > ev.getY());
}

if(topZone){
if(ev.getAction() == MotionEvent.ACTION_UP){
topZone = false;
}
return false;
}
return super.onTouchEvent(ev);
}

}

最佳答案

这种情况有一个解决方法,您可以在嵌套 ScrollView 中覆盖 onInterceptTouchEvent 和 onTouchEvent。有帖子解释如何做到这一点,https://developer.android.com/training/gestures/viewgroup.htmlhttp://neevek.net/posts/2013/10/13/implementing-onInterceptTouchEvent-and-onTouchEvent-for-ViewGroup.html .当您拦截事件时,根据位置和您的自定义逻辑,您将决定不使用触摸将其留给 viewpager 或让默认的 ScrollView 逻辑处理它。

我不赞成这种解决方案,但正如您所解释的,您需要让 NestedScrollview 覆盖 viewPager,除非您可以重新考虑限制

关于android - 将触摸事件从 NestedScrollView 传递到父 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41124973/

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