Ali*_* MH 6 android touch-event android-viewpager android-nestedscrollview
我在 NestedScrollView 宽度下方有一个 ViewPager 一些顶部填充,以及 clipToPadding(false) 和透明背景(如图像)。
我的 ViewPager 无法获得触摸事件并且不起作用。
我怎么解决这个问题?
(我不能改变我的结构,也不能将 ViewPager 移动到 NestedScrollView 的上方或将 TopMargin 设置为 NestedScrollView)
嵌套滚动视图
nestedScrollView = new NestedScrollView(getContext());
nestedScrollView.setFillViewport(true);
nestedScrollView.setLayoutParams(scrollParams);
nestedScrollView.setClipToPadding(false);
Run Code Online (Sandbox Code Playgroud)
通过覆盖 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);
}
}
Run Code Online (Sandbox Code Playgroud)
对于这种情况有一个解决方法,您可以覆盖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。当您拦截事件时,根据位置和自定义逻辑,您将决定不使用触摸将其留给视图分页器或让默认的滚动视图逻辑处理它。
我不赞成这种解决方案,但正如您所解释的,您需要让 NestedScrollview 覆盖 viewPager,除非您可以重新考虑限制
| 归档时间: |
|
| 查看次数: |
4071 次 |
| 最近记录: |