ScrollView+ViewPager+Fragment+RecycleView滑动冲突

这段时间比较忙许久没有写博客了,今天写一个这几天项目内遇到的问题,问题就是如题的滑动冲突问题,烦得很啊。

一、需求

一个界面(p话),大概分文四部分,第一部分是一个地图缩略图,第二部分是关于物品的详细信息,第三部分是控制时间的按钮即查询条件,最后一部分是可以点击或者是互动的轮播类界面。

二、需求实现分析

1、第一种想法肯定是弄个 RecycleView 然后去实现 RecycleView 的丰富多彩列表,额,谁想到了,谁去试一试吧,反正版主很菜,并且很懒,就算了不搞不了,搞不了;
2、就是如题的方案了ScrollView+ViewPager+Fragment+RecycleView,其实,我感觉相比于找后台那群货,帮我改改接口,不如自己解决解决冲突呢。

三、布局搭建

我感觉这个很简单,走心就行了,算了还是把源码搞来吧




    

    

        

            


            

                

                

                

                

                

                

                

                

                

                

                

                

                

                

                

                

                

                

                
            

            

                

                

                
            

            

            
        
    

请记住,版主很懒,也是让各位知道了具体操作,所以没有用 style.xml 相关的操作,这些事源码。

细心的你定发现了 这里的 ViewPager 与众不同,对了,被自定义了。

四、解决冲突的关键 自定义 ViewPager

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;

/**
 * Content:ScrollView与viewPager之间的滑动冲突
 * Actor:韩小呆 ヾ(゚▽゚)ノ
 * Time:  2018/8/1 13:48
 * Update:
 * Time:
 */
public class MyHistoryViewPager extends ViewPager {
    public MyHistoryViewPager(Context context) {
        super(context);
    }


    public MyHistoryViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int height = 0;
        for (int i = 0; i < getChildCount(); i++) {
            View child = getChildAt(i);
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight();
            if (h > height)
                height = h;
        }

        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height,
                MeasureSpec.EXACTLY);

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

这里只是 ViewGroup 根据 其内的 view 高度来 适应处自身的高度。然后我们,我们运行一下代码,看看效果:



细心的你一定发现了,当点击 TabLayout 上的 TabItem 的时候神奇的事情发生了,你的RecycleView自带动画效果---闪现了。
你可以屁颠,屁颠的去找产品了,告诉他,你来了点睛之笔 ,帮助产品 做了动画效果,可以提高用户的可见性,让用户可以很直观的知道下面列表有数据 巴拉巴拉...一大堆,反正是就是让产品背锅呗!(2333)

但是产品也不都是傻狍子哈,下面,告诉你如何解决这个问题。

五、解决闪现 bug

其实吧,很简单,一行代码搞定 ,就是在你的自定义的 ViewPager 直接引用如下方法

 vpHistoryList.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

彻底解决的效果

完美效果

今天就这些了,该去解决 Zxing 识别度问题了,每天积累一点,对自己没坏处哈。

我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。

你可能感兴趣的:(ScrollView+ViewPager+Fragment+RecycleView滑动冲突)