Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

具有共同头部的 ViewPager,支持与ListView,GridView,ScrollView,WebView,RecyclerView 嵌套使用。具有连续的滑动事件 和 滑动监听, 支持下拉刷新。

Notifications You must be signed in to change notification settings

396386866/HeaderViewPager

Repository files navigation

HeaderViewPager

###具有共同头部的 ViewPager,支持与ListView,GridView,ScrollView,WebView,RecyclerView 嵌套使用。具有连续的滑动事件 和 滑动监听, 支持下拉刷新。

该项目参考了:https://github.com/cpoopc/ScrollableLayout 喜欢原作的可以去使用。相比原项目,代码更简单易懂,扩展性更高,欢迎大家下载体验本项目,如果使用过程中遇到什么问题,欢迎反馈。

联系方式

  • 邮箱地址: liaojeason@126.com
  • 微信号: Lzy_19920216
  • QQ群: 489873144 (建议使用QQ群,邮箱使用较少,可能看的不及时)
  • 本群刚建立,旨在为使用我的github项目的人提供方便,如果遇到问题欢迎在群里提问。个人能力也有限,希望一起学习一起进步。

演示

image image image image image

1.用法

该项目和我github上其他的view相关的项目已经一起打包上传到jCenter仓库中(源码地址 https://github.com/jeasonlzy0216/ViewCore ),使用的时候可以直接使用compile依赖,用法如下

	compile 'com.lzy.widget:view-core:0.1.5'

或者使用

 compile project(':header_viewpager')

2.实现原理

把自定义控件 HeaderViewPagerLayoutdispatchTouchEvent 方法进行重写,根据手势方向决定是否分发事件,同时使用 Scroller 滚动内部视图,达到滑动的连续性。 具体详细代码,实例代码中会有详细注释。

3.代码参考

1.布局解析

最外层的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>

2.对于自定义控件,需要做如下初始化

	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);
 }
 });

About

具有共同头部的 ViewPager,支持与ListView,GridView,ScrollView,WebView,RecyclerView 嵌套使用。具有连续的滑动事件 和 滑动监听, 支持下拉刷新。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%

AltStyle によって変換されたページ (->オリジナル) /