android:ViewPager和Horizo​​ntalScrollVIew

我的HorizontalScrollView内心深处ViewPager。我设置 requestDisallowInterceptTouchEvent(true);为,HorizontalScrollViewViewPager有时仍会拦截触摸事件。我还有其他命令可以用来防止View的父级和祖先拦截触摸事件吗?

注意:HorizontalScrollView仅占据屏幕的一半。


ibeautiful
浏览 375回答 3
3回答

人到中年有点甜

我有同样的问题。我的解决方案是:成为的子类ViewPager并添加一个名为的属性childId。为该childId属性创建一个setter 并设置ID HorizontalScrollView。覆盖onInterceptTouchEvent()的子类,ViewPager如果childId属性大于0,则获取该子项;如果事件在HorizontalScrollView区域中,则返回false。码public class CustomViewPager extends ViewPager {    private int childId;        public CustomViewPager(Context context, AttributeSet attrs) {        super(context, attrs);    }       @Override    public boolean onInterceptTouchEvent(MotionEvent event) {        if (childId > 0) {            View scroll = findViewById(childId);            if (scroll != null) {                Rect rect = new Rect();                scroll.getHitRect(rect);                if (rect.contains((int) event.getX(), (int) event.getY())) {                    return false;                }            }        }        return super.onInterceptTouchEvent(event);    }    public void setChildId(int id) {        this.childId = id;    }}在onCreate()方法中viewPager.setChildId(R.id.horizontalScrollViewId);adapter = new ViewPagerAdapter(this);viewPager.setAdapter(adapter);希望这个帮助

catspeake

谢谢回复。我稍微修改了您的解决方案,并设法使嵌套的ViewPagers工作:public class CustomViewPager extends ViewPager {    private int childId;    public CustomViewPager(Context context, AttributeSet attrs) {        super(context, attrs);    }     @Override    public boolean onInterceptTouchEvent(MotionEvent event) {        if (childId > 0) {                      ViewPager pager = (ViewPager)findViewById(childId);            if (pager != null) {                           pager.requestDisallowInterceptTouchEvent(true);            }        }        return super.onInterceptTouchEvent(event);    }    public void setChildId(int id) {        this.childId = id;    }}
打开App,查看更多内容
随时随地看视频慕课网APP