###具有共同头部的 ViewPager,支持与ListView,GridView,ScrollView,WebView,RecyclerView 嵌套使用。具有连续的滑动事件 和 滑动监听, 支持下拉刷新。
该项目参考了:https://github.com/cpoopc/ScrollableLayout 喜欢原作的可以去使用。相比原项目,代码更简单易懂,扩展性更高,欢迎大家下载体验本项目,如果使用过程中遇到什么问题,欢迎反馈。
- 邮箱地址: liaojeason@126.com
- 微信号: Lzy_19920216
- QQ群: 489873144 (建议使用QQ群,邮箱使用较少,可能看的不及时)
- 本群刚建立,旨在为使用我的github项目的人提供方便,如果遇到问题欢迎在群里提问。个人能力也有限,希望一起学习一起进步。
该项目和我github上其他的view相关的项目已经一起打包上传到jCenter仓库中(源码地址 https://github.com/jeasonlzy0216/ViewCore ),使用的时候可以直接使用compile依赖,用法如下
compile 'com.lzy.widget:view-core:0.1.5'
或者使用
compile project(':header_viewpager')
把自定义控件 HeaderViewPagerLayout 的 dispatchTouchEvent 方法进行重写,根据手势方向决定是否分发事件,同时使用 Scroller 滚动内部视图,达到滑动的连续性。 具体详细代码,实例代码中会有详细注释。
最外层的PtrClassicFrameLayout使用的是第三方下拉刷新控件,包裹在自定义控件HeaderViewPagerLayout之外,可以让HeaderViewPagerLayout拥有下拉刷新的功能,其中,HeaderViewPagerLayout有三个子View,只有第一个子View会被自定义控件按头部解析,所以,如果头部有多个View,可以使用ViewGroup包裹,例如下面实例使用的是LinearLayout包裹(头部也是一个ViewPager),除了第一个View会被滑出去外,其余布局均不会被滑出。
<?xml version="1.0" encoding="utf-8"?> <in.srain.cube.views.ptr.PtrClassicFrameLayout android:id="@+id/ptr" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" app:ptr_duration_to_close="200" app:ptr_duration_to_close_header="1000" app:ptr_keep_header_when_refresh="true" app:ptr_pull_to_fresh="false" app:ptr_ratio_of_header_height_to_refresh="1.2" app:ptr_resistance="1.7"> <com.lzy.ui.HeaderViewPagerLayout android:id="@+id/scrollableLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="150dp"> <android.support.v4.view.ViewPager android:id="@+id/pagerHeader" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> <com.lzy.headerviewpager.ui.PagerSlidingTabStrip android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="40dp" android:background="@mipmap/bg_menu_normal" android:textSize="16sp" app:pstsDividerColor="#00000000" app:pstsIndicatorColor="#2DA4F0" app:pstsIndicatorHeight="2dp" app:pstsShouldExpand="false" app:pstsTextAllCaps="false" app:pstsUnderlineHeight="2dp"/> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"/> </com.lzy.ui.HeaderViewPagerLayout> </in.srain.cube.views.ptr.PtrClassicFrameLayout>
scrollableLayout.setCurrentScrollableContainer(fragments.get(0)); viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { scrollableLayout.setCurrentScrollableContainer(fragments.get(position)); } });
3.如果需要对滑动过程进行监听,可以使用如下代码,currentY 表示当前滑过的距离,maxY表示当前可以滑动的最大距离,有了这两个参数,就可以对任意布局,做任何动画了。例如如下代码就是实现 视差动画效果的代码。
scrollableLayout.setOnScrollListener(new HeaderViewPagerLayout.OnScrollListener() {
@Override
public void onScroll(int currentY, int maxY) {
image.setTranslationY(currentY / 2);
}
});