【发布时间】:2017-04-28 17:49:30
【问题描述】:
我在 NestedScrollView 下方有一个 ViewPager,宽度有一些顶部填充,还有 clipToPadding(false) 和透明背景(如图片)。
我的 ViewPager 无法获取触摸事件并且不起作用。
我该如何解决这个问题?
(我无法更改结构,也无法将 ViewPager 移动到 NestedScrollView 的上方或将 TopMargin 设置为 NestedScrollView)
NestedScrollView
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);
}
}
【问题讨论】:
-
这应该是在讨论布局结构时图像外观的新标准。
-
无论如何,当滚动视图消失时,Viewpager 是否工作?我怀疑滚动视图在到达 Viewpager 之前拦截了触摸事件。
-
我有类似whatsapp的个人资料片段,类似collapsingToolbar的东西
-
@DeeV 是的,它有效。当我将 viewpager 放在滚动视图的顶部时,它也可以工作。
-
可以选择使用
代替 topPadding 吗?
标签: android android-viewpager touch-event android-nestedscrollview