ViewPager
联动方案:
1.通过ViewPager1计算出滑动的距离,将此距离在给ViewPager2滑动
ViewPager1滑动距离:滑动初始页到左右边距的距离;
distance=positon*View.getWidth()+oisutuibOffsetPixels
2.通过设置ViewPager2的scrollTo(x坐标,y坐标)/scrollBy(增加的x坐标,减少的y坐标)方法进行ViewPager2的滑动,同时调用viewpager2.setCurrentItem()方法
scrollTo移动的是画布,由于ViewPager预加载加载机制只加载当前页的前后页,所以只移动画布会导致没有预加载出相关的内容,所以需要调用setCurrentItem方法
通过onPageChangeListener回调监听ViewPager滑动时的动作
ViewPager2
内部其实使用的是recyclerview,每个Item占据当前控件的宽度
ViewPager2模拟滑动--fakeDragBy方法,注意此方法计算的是增量,所以要记录position计算差值
但是调用此方法因为四舍五入所以会有差值,所以解决方法是直接拿到ViewPager2中的Recyclerview,对其进行滑动
最优雅的方法
将作用在ViewPager1的事件,在同样坐标下分发给ViewPager2
方法:
1.将ViewPager1、ViewPager2分别包裹在自定义的linearlayout中,注意此时的宽高位置要保持一致,方便进行事件同步的分发
时间分发原理,分发流程由上至下传递分发,消费原理由下至上反馈