为了账号安全,请及时绑定邮箱和手机立即绑定

android:ViewPager和Horizo​​ntalScrollVIew

android:ViewPager和Horizo​​ntalScrollVIew

ibeautiful 2019-12-20 10:32:30
我的HorizontalScrollView内心深处ViewPager。我设置 requestDisallowInterceptTouchEvent(true);为,HorizontalScrollView但ViewPager有时仍会拦截触摸事件。我还有其他命令可以用来防止View的父级和祖先拦截触摸事件吗?注意:HorizontalScrollView仅占据屏幕的一半。
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我有同样的问题。我的解决方案是:


成为的子类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);

希望这个帮助


查看完整回答
反对 回复 2019-12-20
?
catspeake

TA贡献1111条经验 获得超0个赞

谢谢回复。我稍微修改了您的解决方案,并设法使嵌套的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;

    }

}


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 371 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信