YViewPager,support horizontal and vertical,based on support.v4.view.ViewPager
compile 'cn.youngkaaa:yviewpager:0.4'
<dependency>
<groupId>cn.youngkaaa</groupId>
<artifactId>yviewpager</artifactId>
<version>0.4</version>
<type>pom</type>
</dependency>
支持水平方向上滑动和竖直方向上的滑动,直接修改的官方提供的ViewPager
的源码,注入了方向判断,使用起来和官方的ViewPager
基本一样,还有监听事件也是一样的,支持setOffscreenPageLimit()
可以放心滑动,以及TabLayout
等。
在官方原有特性下,新增加direction
属性。可以通过两种方式来设置:
<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
,分别代表竖直方向上滑动和水平方向上滑动。
mViewPager.setDirection(YViewPager.VERTICAL);
mViewPager.setDirection(YViewPager.HORIZONTAL);
具体意思同上
注意,设计的起始是想着在YViewPager
一开始inflate时就应该确定了方向,如果在后期app运行时(即在YViewPager
创建显示后)通过代码来修改方向的话,这种做法不推荐,因为YViewPager
内部可能有很深View结构的Fragment
,所以在此时修改YViewPager
的direction
的话,会通知刷新YViewPager
,会造成顿时卡顿,所以不推荐此做法,但是不代表不可以这样做,如果您的需求确实是这样那么这样做也是可以的。
在v1.2
版本开始增添了circulatory
属性,你可以这样使用:
<cn.youngkaaa.yviewpager.YViewPager
android:id="@+id/viewpager1"
android:layout_width="match_parent"
android:layout_height="188dp"
app:circulatory="true"
app:orientation="horizontal"/>
是的,就只需要一句代码就可以了。
对不起,暂时不支持使用java代码动态修改circulatory
属性。因为一般循环与否都是在xml中提前决定好的,所以就仅仅支持xml修改
更新yViewPager结构为继承自ViewPager,用以可以和更多的库组合使用,比如这个优秀的库VerticalTabLayout。并且除去了原先的YPagerAdapter等类,现在支持使用ViewPager的Adapter。尽可能把它当成一个ViewPager来使用吧
具体更细看这里 (2017-4-18
)
minSdkVersion调整到14 (2017-4-08
)
加入循环属性,同样支持水平和竖直两个方向上的循环。
支持水平和竖直方向上得滑动切换
为什么我要在官方原有的ViewPager
源码的基础上来修改,是因为官方在做ViewPager
中做了很多优化和提升,所以我只修改了原有的源码的事件逻辑,并没有大的修改,所以官方的心血还是保留了的。但是这样带来的也有缺点,那就是官方的那些FragmentPagerAdapter
和FragmentStatePagerAdapter
以及PagerAdapter
都不能直接调用了,因为这些类里面有一些方法不支持外部类调用,所以我拷贝了这三个类到本仓库中,代码和官方的是一样的,只是改了类名以保证可以在YViewPager
中调用而已,所以你可以按照官方的方式来使用,你可以在你的项目中需要哪一个XXXXAdapter
就拷贝该类到你的项目中去。
最后附上运行图:
v0.1
v0.2
如果你觉得本仓库对你有用的话请给个star表示鼓励吧
具体的关于ViewPager
的源码简单分析可以看我的博客
Copyright 2016 youngkaaa
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.