基于官方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属性,该属性可选值为:verticalhorizontal,分别代表竖直方向上滑动和水平方向上滑动。

java代码

mViewPager.setDirection(YViewPager.VERTICAL);
mViewPager.setDirection(YViewPager.HORIZONTAL);

具体意思同上 注意,设计的起始是想着在YViewPager一开始inflate时就应该确定了方向,如果在后期app运行时(即在YViewPager创建显示后)通过代码来修改方向的话,这种做法不支持,因为YViewPager内部可能有很深View结构的Fragment,所以在此时修改YViewPagerdirection的话,会通知刷新YViewPager,会造成顿时卡顿,所以不支持此做法,但是不代表不可以这样做,如果您的需求确实是这样那么这样做也是可以的。

最后

为什么我要在官方原有的ViewPager源码的基础上来修改,是因为官方在做ViewPager中做了很多优化和提升,所以我只修改了原有的源码的事件逻辑,并没有大的修改,所以官方的心血还是保留了的。但是这样带来的也有缺点,那就是官方的那些FragmentPagerAdapterFragmentStatePagerAdapter以及PagerAdapter都不能直接调用了,因为这些类里面有一些方法不支持外部类调用,所以我拷贝了这三个类到本仓库中,代码和官方的是一样的,只是改了类名以保证可以在YViewPager中调用而已,所以你可以按照官方的方式来使用,你可以在你的项目中需要哪一个XXXXAdapter就拷贝该类到你的项目中去。

最后附上运行图:

https://github.com/youngkaaa/YViewPagerDemo/blob/master/screens/record.gif

如果你觉得本仓库对你有用的话请给个star表示鼓励吧

仓库看这里: https://github.com/youngkaaa/YViewPagerDemo