基于官方ViewPager,支持水平方向上滑动和竖直方向上的滑动
YViewPagerDemo
YViewPager,support horizontal and vertical,based on support.v4.view.ViewPager
简介
支持水平方向上滑动和竖直方向上的滑动,直接修改的官方提供的ViewPager
的源码,注入了方向判断,使用起来和官方的ViewPager
基本一样,还有监听事件也是一样的,支持setOffscreenPageLimit()
可以放心滑动,以及TabLayout
等。
特性
在官方原有特性下,新增加direction
属性。可以通过两种方式来设置:
xml
<cn.youngkaaa.yviewpager.YViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:orientation="vertical"/>
就像上面这样,只需要设置app:orientation
属性,该属性可选值为:vertical
和horizontal
,分别代表竖直方向上滑动和水平方向上滑动。
java代码
mViewPager.setDirection(YViewPager.VERTICAL);
mViewPager.setDirection(YViewPager.HORIZONTAL);
具体意思同上 注意,设计的起始是想着在YViewPager
一开始inflate时就应该确定了方向,如果在后期app运行时(即在YViewPager
创建显示后)通过代码来修改方向的话,这种做法不支持,因为YViewPager
内部可能有很深View结构的Fragment
,所以在此时修改YViewPager
的direction
的话,会通知刷新YViewPager
,会造成顿时卡顿,所以不支持此做法,但是不代表不可以这样做,如果您的需求确实是这样那么这样做也是可以的。
最后
为什么我要在官方原有的ViewPager
源码的基础上来修改,是因为官方在做ViewPager
中做了很多优化和提升,所以我只修改了原有的源码的事件逻辑,并没有大的修改,所以官方的心血还是保留了的。但是这样带来的也有缺点,那就是官方的那些FragmentPagerAdapter
和FragmentStatePagerAdapter
以及PagerAdapter
都不能直接调用了,因为这些类里面有一些方法不支持外部类调用,所以我拷贝了这三个类到本仓库中,代码和官方的是一样的,只是改了类名以保证可以在YViewPager
中调用而已,所以你可以按照官方的方式来使用,你可以在你的项目中需要哪一个XXXXAdapter
就拷贝该类到你的项目中去。
最后附上运行图:
https://github.com/youngkaaa/YViewPagerDemo/blob/master/screens/record.gif
如果你觉得本仓库对你有用的话请给个star表示鼓励吧