Material Design ViewPager 易于使用的库
并观看示例 Youtube 视频:Youtube 链接
在你的模块中
compile ' com.github.florent37:materialviewpager:1.2.3 '
// dependencies
compile ' com.flaviofaria:kenburnsview:1.0.7 '
compile ' com.jpardogo.materialtabstrip:library:1.1.0 '
compile ' com.github.bumptech.glide:glide:4.0.0 '
将 MaterialViewPager 添加到您的 Activity 布局中
< com .github.florent37.materialviewpager.MaterialViewPager
android : id = " @+id/materialViewPager "
android : layout_width = " match_parent "
android : layout_height = " match_parent "
app : viewpager_logo = " @layout/header_logo "
app : viewpager_logoMarginTop = " 100dp "
app : viewpager_color = " @color/colorPrimary "
app : viewpager_headerHeight = " 200dp "
app : viewpager_headerAlpha = " 1.0 "
app : viewpager_hideLogoWithFade = " false "
app : viewpager_hideToolbarAndTitle = " true "
app : viewpager_enableToolbarElevation = " true "
app : viewpager_parallaxHeaderFactor = " 1.5 "
app : viewpager_headerAdditionalHeight = " 20dp "
app : viewpager_displayToolbarWhenSwipe = " true "
app : viewpager_transparentToolbar = " true "
app : viewpager_animatedHeaderImage = " true "
app : viewpager_disableToolbar = " false "
/>
与header_logo.xml
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< TextView xmlns : android = " http://schemas.android.com/apk/res/android "
android : id = " @+id/logo_white "
android : layout_width = " wrap_content "
android : layout_height = " @dimen/materialviewpager_logoHeight "
android : text = " Material is Good "
android : textSize = " 30sp "
android : textColor = " @android:color/white " />
您将在 Android Studio 预览版中看到:
要获得漂亮的屏幕并启用预览,您的主题可以遵循
< style name = " AppBaseTheme " parent = " @style/Theme.AppCompat.Light " >
</ style >
< style name = " AppTheme " parent = " AppBaseTheme " >
< item name = " android:textColorPrimary " >@android:color/white</ item >
< item name = " drawerArrowStyle " >@style/DrawerArrowStyle</ item >
< item name = " android:windowTranslucentStatus " tools : targetApi = " 21 " >true</ item >
< item name = " android:windowContentOverlay " >@null</ item >
< item name = " windowActionBar " >false</ item >
< item name = " windowNoTitle " >true</ item >
<!-- Toolbar Theme / Apply white arrow -->
< item name = " colorControlNormal " >@android:color/white</ item >
< item name = " actionBarTheme " >@style/AppTheme.ActionBarTheme</ item >
<!-- Material Theme -->
< item name = " colorPrimary " >@color/colorPrimary</ item >
< item name = " colorPrimaryDark " >@color/colorPrimaryDark</ item >
< item name = " colorAccent " >@color/accent_color</ item >
< item name = " android:navigationBarColor " tools : targetApi = " 21 " >@color/navigationBarColor</ item >
< item name = " android:windowDrawsSystemBarBackgrounds " tools : targetApi = " 21 " >true</ item >
</ style >
< style name = " AppTheme.ActionBarTheme " parent = " @style/ThemeOverlay.AppCompat.ActionBar " >
<!-- White arrow -->
< item name = " colorControlNormal " >@android:color/white</ item >
</ style >
< style name = " DrawerArrowStyle " parent = " Widget.AppCompat.DrawerArrowToggle " >
< item name = " spinBars " >true</ item >
< item name = " color " >@color/drawerArrowColor</ item >
</ style >
您可以将MaterialViewPager用作通常的Android View,并通过findViewById获取它
public class MainActivity extends ActionBarActivity {
private MaterialViewPager mViewPager ;
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
mViewPager = ( MaterialViewPager ) findViewById ( R . id . materialViewPager );
}
}
首先选择你的颜色和高度
< com .github.florent37.materialviewpager.MaterialViewPager
android : id = " @+id/materialViewPager "
android : layout_width = " match_parent "
android : layout_height = " match_parent "
...
app : viewpager_color = " @color/colorPrimary "
app : viewpager_headerHeight = " 200dp "
...
/>
< com .github.florent37.materialviewpager.MaterialViewPager
...
app : viewpager_logo = " @layout/header_logo " <-- look custom logo layout
app : viewpager_logoMarginTop = " 100dp " <-- look at the preview
...
/>
您的徽标的布局必须
header_logo.xml
< ImageView xmlns : android = " http://schemas.android.com/apk/res/android "
android : id = " @+id/logo_white "
android : layout_width = " 200dp "
android : layout_height = " @dimen/materialviewpager_logoHeight "
android : fitsSystemWindows = " true "
android : adjustViewBounds = " true "
android : layout_centerHorizontal = " true "
android : src = " @drawable/logo_white " />
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_hideLogoWithFade = " false "
...
/>
header_logo.xml
< FrameLayout xmlns : android = " http://schemas.android.com/apk/res/android "
android : layout_width = " 80dp "
android : layout_height = " 80dp "
android : layout_centerHorizontal = " true "
android : background = " @drawable/circle " >
< ImageView
android : layout_width = " 30dp "
android : layout_height = " 30dp "
android : fitsSystemWindows = " true "
android : adjustViewBounds = " true "
android : layout_gravity = " center "
android : src = " @drawable/flying " />
</ FrameLayout >
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_hideLogoWithFade = " true "
...
/>
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_hideToolbarAndTitle = " true "
...
/>
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_hideToolbarAndTitle = " false "
...
/>
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_transparentToolbar = " true "
...
/>
您可以替换标题
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_header = " @layout/myHeader "
...
/>
或者使用默认标题和 KenBurns 动画
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_animatedHeaderImage = " true "
...
/>
或者简单地使用 ImageView 作为标题
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_animatedHeaderImage = " false "
...
/>
你可以设置自己的标签栏,默认我提供了2个实现
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_pagerTitleStrip = " @layout/material_view_pager_pagertitlestrip_standard "
...
/>
< com .github.florent37.materialviewpager.MaterialViewPager`
...
app : viewpager_pagerTitleStrip = " @layout/material_view_pager_pagertitlestrip_newstand "
...
/>
使用 PagerSlidingTabStrip 创建您自己的布局
my_tabs.xml
< com .astuetz.PagerSlidingTabStrip
xmlns : android = " http://schemas.android.com/apk/res/android "
xmlns : app = " http://schemas.android.com/apk/res-auto "
xmlns : tools = " http://schemas.android.com/tools "
android : id = " @id/materialviewpager_pagerTitleStrip "
android : layout_width = " match_parent "
android : layout_height = " match_parent "
app : pstsPaddingMiddle = " true "
app : pstsDividerPadding = " 20dp "
app : pstsIndicatorColor = " #FFF "
app : pstsIndicatorHeight = " 2dp "
app : pstsShouldExpand = " true "
app : pstsTabPaddingLeftRight = " 10dp "
app : pstsTabTextAllCaps = " true "
tools : background = " #A333 "
/>
不要忘记给它 id="@id/materialviewpager_pagerTitleStrip"
< com .github.florent37.materialviewpager.MaterialViewPager
...
app : viewpager_pagerTitleStrip = " @layout/my_tabs "
...
/>
只需添加一个监听到ViewPager
mViewPager . setMaterialViewPagerListener ( new MaterialViewPager . Listener () {
@ Override
public HeaderDesign getHeaderDesign ( int page ) {
switch ( page ) {
case 0 :
return HeaderDesign . fromColorResAndUrl (
R . color . blue ,
"http://cdn1.tnwcdn.com/wp-content/blogs.dir/1/files/2014/06/wallpaper_51.jpg" );
case 1 :
return HeaderDesign . fromColorResAndUrl (
R . color . green ,
"https://fs01.androidpit.info/a/63/0e/android-l-wallpapers-630ea6-h900.jpg" );
case 2 :
return HeaderDesign . fromColorResAndUrl (
R . color . cyan ,
"http://www.droid-life.com/wp-content/uploads/2014/10/lollipop-wallpapers10.jpg" );
case 3 :
return HeaderDesign . fromColorResAndUrl (
R . color . red ,
"http://www.tothemobile.com/wp-content/uploads/2014/07/original.jpg" );
}
//execute others actions if needed (ex : modify your header logo)
return null ;
}
});
可用的
HeaderDesign . fromColorAndUrl ( Color . BLUE , "http:...);
HeaderDesign.fromColorResAndUrl(R.color.blue," http :...);
HeaderDesign . fromColorAndDrawable ( Color . BLUE , myDrawable );
HeaderDesign . fromColorResAndDrawable ( R . color . blue , myDrawable );
Toolbar toolbar = mViewPager . getToolbar ();
if ( toolbar != null ) {
setSupportActionBar ( toolbar );
ActionBar actionBar = getSupportActionBar ();
actionBar . setDisplayHomeAsUpEnabled ( true );
actionBar . setDisplayShowHomeEnabled ( true );
actionBar . setDisplayShowTitleEnabled ( true );
actionBar . setDisplayUseLogoEnabled ( false );
actionBar . setHomeButtonEnabled ( true );
}
ViewPager viewPager = mViewPager . getViewPager ();
viewPage . setAdapter (...);
//After set an adapter to the ViewPager
mViewPager . getPagerTitleStrip (). setViewPager ( mViewPager . getViewPager ());
mRecyclerView . addItemDecoration ( new MaterialViewPagerHeaderDecorator ());
mRecyclerView . setAdapter ( yourAdapter );
ScrollView 必须是 NestedScrollView`
MaterialViewPagerHelper . registerScrollView ( getActivity (), mScrollView , null );
并将 @layout/material_view_pager_placeholder` 作为第一个子项
< android .support.v4.widget.NestedScrollView
xmlns : android = " http://schemas.android.com/apk/res/android "
android : id = " @+id/scrollView "
android : layout_width = " match_parent "
android : layout_height = " match_parent " >
< LinearLayout
android : layout_width = " match_parent "
android : layout_height = " wrap_content "
android : orientation = " vertical " >
< include layout = " @layout/material_view_pager_placeholder " />
...your content...
</ LinearLayout >
</ android .support.v4.widget.NestedScrollView>
固定的 :
已修复:快速滚动会导致工具栏高度变化
RecyclerViewMaterialAdapter 可以处理自定义占位符单元格计数(对于 GridLayoutManager 很有用)
public RecyclerViewMaterialAdapter ( RecyclerView . Adapter adapter , int placeholderSize )
新增属性
app : viewpager_parallaxHeaderFactor = "1.5"
app : viewpager_headerAdditionalHeight = "20dp"
parallaxHeaderFactor修改视差标题滚动的速度(不是 KenBurns 效果的速度) parallaxHeaderFactor设置显示在第一个卡片视图后面的标题布局的高度
修复了当 hideToolbarAndTitle="true" 时向下滚动和向上滚动多次时的问题
新增属性
viewpager_headerAlpha = "0.6"
寻找贡献者,请随意分叉!
告诉我您是否在应用程序中使用我的库,我将在此自述文件中分享它
作者:弗洛伦特·尚皮尼 http://www.florentchampigny.com/
博客:http://www.tutos-android-france.com/
Fiches Plateau Moto:https://www.fiches-plateau-moto.fr/
Copyright 2015 florent37, Inc.
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.