`

ScrollView 嵌套 ViewPager导致滑动冲突解决方案

阅读更多
解决方案1:

自定义Viewpager做为子控件

    public class ChildViewPager extends ViewPager{ 
        /** 触摸时按下的点 **/ 
        PointF downP = new PointF(); 
        /** 触摸时当前的点 **/ 
        PointF curP = new PointF();  
        OnSingleTouchListener onSingleTouchListener; 
     
        public ChildViewPager(Context context, AttributeSet attrs) { 
            super(context, attrs); 
            // TODO Auto-generated constructor stub 
        } 
     
        public ChildViewPager(Context context) { 
            super(context); 
            // TODO Auto-generated constructor stub 
        } 
     
        @Override 
        public boolean onInterceptTouchEvent(MotionEvent arg0) { 
            // TODO Auto-generated method stub 
            //当拦截触摸事件到达此位置的时候,返回true, 
            //说明将onTouch拦截在此控件,进而执行此控件的onTouchEvent 
            return true; 
        } 
     
        @Override 
        public boolean onTouchEvent(MotionEvent arg0) { 
            // TODO Auto-generated method stub 
            //每次进行onTouch事件都记录当前的按下的坐标 
            curP.x = arg0.getX(); 
            curP.y = arg0.getY(); 
     
            if(arg0.getAction() == MotionEvent.ACTION_DOWN){ 
                //记录按下时候的坐标 
                //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变 
                downP.x = arg0.getX(); 
                downP.y = arg0.getY(); 
                //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 
                getParent().requestDisallowInterceptTouchEvent(true); 
            } 
     
            if(arg0.getAction() == MotionEvent.ACTION_MOVE){ 
                //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 
                getParent().requestDisallowInterceptTouchEvent(true); 
            } 
     
            if(arg0.getAction() == MotionEvent.ACTION_UP){ 
                //在up时判断是否按下和松手的坐标为一个点 
                //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick 
                if(downP.x==curP.x && downP.y==curP.y){ 
                    onSingleTouch(); 
                    return true; 
                } 
            } 
     
            return super.onTouchEvent(arg0); 
        } 
     
            /**
         * 单击
         */ 
        public void onSingleTouch() { 
            if (onSingleTouchListener!= null) { 
     
                onSingleTouchListener.onSingleTouch(); 
            } 
        } 
     
        /**
         * 创建点击事件接口
         * @author wanpg
         *
         */ 
        public interface OnSingleTouchListener { 
            public void onSingleTouch(); 
        } 
     
        public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) { 
            this.onSingleTouchListener = onSingleTouchListener; 
        } 
     
    } [align=center][/align]
分享到:
评论
2 楼 jokeYJW 2016-08-05  
 
1 楼 jokeYJW 2016-08-05  
   

相关推荐

    研究ScrollView嵌套ViewPager问题的Demo

    然而,当ScrollView嵌套ViewPager时,可能会遇到一些问题,这些问题主要集中在内容无法正常显示和滑动冲突上。 首先,我们来探讨为什么ScrollView嵌套ViewPager会导致ViewPager中的内容无法显示。这主要是因为...

    ScrollView嵌套ViewPager和ListView

    ScrollView嵌套ViewPager,ViewPager横向滑动时容易上下滚动处理; ScrollView嵌套ListView,ListView滚动事件处理,可滚动; ScrollView子控件获取焦点后自动置顶问题处理。 ListView滚动到顶或到底事件监听。

    ScrollView嵌套ViewPager,可滑动,可动态设置ViewPager高度

    本示例“ScrollView嵌套ViewPager,可滑动,可动态设置ViewPager高度”就巧妙地解决了这两个组件的结合问题。 首先,让我们详细了解一下ScrollView。ScrollView是一个可滚动的视图容器,它只允许垂直方向的滚动。当...

    ScrollingTricks效果 ScrollView嵌套Viewpager嵌套Listview

    一个特效Demo 具体看博客http://blog.csdn.net/liubo20140401/article/details/47907039 一个向上滑动 tab固定顶部 scrollview中嵌套viewpager嵌套listview 还有回到顶部

    Android ScrollView嵌套TabLayout+ViewPager

    亲测成功,可以直接嵌套项目中 ScrollView嵌套TabLayout+ViewPager解决滑动冲突,已进行重点标注 ViewPager会根据frament的界面高度进行展示,进行framnet的高度测量 嵌套冲突已全部解决

    scrollview嵌套viewpager嵌套fragmetn嵌套recyclerview的demo

    本示例"scrollview嵌套viewpager嵌套fragmetn嵌套recyclerview的demo"正是为了解决这些问题,并展示如何优雅地处理这些组件的嵌套。 首先,`ScrollView`是一个可滚动的容器,它可以包含一个或多个视图,允许用户...

    Android:ScrollView中嵌套ViewPager和ListView示例

    综上所述,虽然在ScrollView中嵌套ViewPager和ListView可能带来一些挑战,但通过合理的设计和配置,我们可以有效地解决这些问题,实现预期的功能。在Android开发中,理解并掌握这些技术可以帮助我们构建更加灵活和...

    Android代码-TouchDemo

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 这篇博客主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌套ViewPager导致的滑动冲突 ViewPager里面嵌套...

    ScrollViewWithViewPager:研究Android ScrollView嵌套ViewPager问题

    当需要在一个页面中同时展示多个可滑动的视图,并且整个页面还需要支持垂直滚动时,开发者可能会尝试将ScrollView和ViewPager进行嵌套。然而,这种组合往往会导致一些问题,因为它们的滚动机制存在冲突。 在...

    ViewPagerScrollView嵌套冲突问题,eclipse版

    这样,`ScrollView` 就成为了`ViewPager` 的一个单独的、可滚动的页面,滑动冲突得以解决。 - **使用NestedScrollView**:如果项目支持API 21及以上,可以考虑使用`NestedScrollView` 替换`ScrollView`。`...

    Scrollview_ViewPager_ListView

    当ScrollView嵌套ViewPager和/或ListView时,主要问题有以下几点: 1. **滚动冲突**:由于ScrollView和ViewPager/ListView都具备滚动功能,它们之间的滚动事件可能会相互干扰,导致无法正常滚动或者滚动体验极差。 ...

    ScrollView兼容ViewPager代码demo

    在这个"ScrollView兼容ViewPager代码demo"中,开发者可能面临的问题是如何在ScrollView内嵌入一个ViewPager,因为这两个组件本身都支持滚动,所以在组合使用时可能会产生冲突,导致滚动行为不正常。解决这个问题的...

    Android App中ViewPager所带来的滑动冲突问题解决方法

    2. 不同方向滑动冲突:比如ScrollView嵌套ViewPager的情况,ScrollView通常是垂直滑动,而ViewPager则是水平滑动。这种冲突在于,当用户尝试在一个方向上滑动时,可能会触发另一个方向的滑动。在微信等应用中,底部...

    ScrollViewChildViewpager201605122134在ScrollView中嵌套Viewpager.zip

    "ScrollViewChildViewpager201605122134在ScrollView中嵌套Viewpager.zip"这个压缩包提供了一个示例,展示了如何在ScrollView中正确地嵌套使用ViewPager,同时解决了两者之间可能出现的焦点冲突问题,并且优化了...

    Scrollview中嵌套ViewPager和ListView常出现的问题

    Scrollview中嵌套ViewPager和ListView常出现的问题: ViewPager如果在Scrollview中使用,并且宽高指定为match_parent或者wrap_content则不会显示内容,但是如果将高度指定为200dp,则ViewPager则会将内容显示到屏幕...

    android 中 ViewPager 与scrollView 冲突的解决

    2. **使用NestedScrollView替换ScrollView**:NestedScrollView是Android提供的一个可以嵌套滑动的组件,它可以更好地与ViewPager协同工作。在NestedScrollView中,你可以设置`nestedScrollingEnabled`属性为`true`...

    ScrollView+TabLayout+ViewPager+RecyclerView 嵌套实现布局

    手动实现仿京东发现页面效果,使用布局嵌套完成,包括ScrollView+TabLayout+ViewPager+RecyclerView,最后有遗留问题需要处理。详情见博客https://blog.csdn.net/hq942845204/article/details/88844272

    ScrollView+ListView+ViewPager滑动不冲突

    通过上述策略的组合使用,开发者可以有效地解决ScrollView、ListView和ViewPager滑动不冲突的问题,提高应用的用户体验。在实际开发中,应根据项目需求和具体情况灵活选择合适的方法,确保滑动操作的顺畅和一致性。

    类似viewpager嵌套滑动

    3. **禁用默认滚动行为**:有时,内部的NestedScrollView或其他可滚动视图可能会与ViewPager的滑动冲突,这时我们需要禁用内部视图的默认滚动行为,如设置`android:nestedScrollingEnabled="false"`。 4. **监听...

    Scrollview嵌套RecyclerView

    当在一个ScrollView中嵌套一个RecyclerView时,可能会遇到一些常见问题,例如滚动冲突、性能下降等。本篇文章将详细探讨这些问题以及解决方案。 1. 滚动冲突 当ScrollView与RecyclerView同时存在时,两者都会尝试...

Global site tag (gtag.js) - Google Analytics