我的ViewPager在NestedScrollView宽度下方有一些顶部填充,clipToPadding(false)和透明背景(如图像)。
我的ViewPager无法获取触摸事件但无效。
我该如何解决这个问题?
(我无法更改我的结构,无法将ViewPager移动到NestedScrollView以上或将TopMargin设置为NestedScrollView)
NestedScrollView
nestedScrollView = new NestedScrollView(getContext());
nestedScrollView.setFillViewport(true);
nestedScrollView.setLayoutParams(scrollParams);
nestedScrollView.setClipToPadding(false);
通过覆盖NestedScrollView和Override 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);
}
}
答案 0 :(得分:1)
这种情况有一种解决方法,您可以在nestedscrollview中覆盖onInterceptTouchEvent和onTouchEvent。有些帖子解释了如何执行此操作,https://developer.android.com/training/gestures/viewgroup.html和http://neevek.net/posts/2013/10/13/implementing-onInterceptTouchEvent-and-onTouchEvent-for-ViewGroup.html。截取事件时,根据位置和自定义逻辑,您决定不使用触摸将其保留给viewpager,或让默认的scrollview逻辑处理它。
我不赞成这个解决方案,但正如您解释的那样,您需要让NestedScrollview覆盖viewPager,除非您可以重新考虑这些限制