版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么在Android中利用ViewPager实现一个屏幕滑动效果
本篇文章给大家分享的是有关怎么在Android中利用ViewPager实现一个屏幕滑动效果,在下觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着在下一起来看看吧。创建View创建一个在之后作为fragment的内容的布局文件,下面的例子中包含一个Textview,用来展示一些文字。<!--
fragment_screen_slide_page.xml
-->
<ScrollView
xmlns:android="/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:padding="16dp"
android:lineSpacingMultiplier="1.2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/lorem_ipsum"
/>
</ScrollView>创建Fragment创建一个Fragment子类,并在onCreateView()方法中加载上一步里创建的布局。import
android.support.v4.app.Fragment;
...
public
class
ScreenSlidePageFragment
extends
Fragment
{
@Override
public
View
onCreateView(LayoutInflater
inflater,
ViewGroup
container,
Bundle
savedInstanceState)
{
ViewGroup
rootView
=
(ViewGroup)
inflater.inflate(
R.layout.fragment_screen_slide_page,
container,
false);
return
rootView;
}
}创建完成之后,就可以在父Activity中创建任意个该fragment的实例来向用户展示内容了。添加ViewPagerViewPager内嵌了对滑动手势的支持,因此它在默认设置下就能够实现屏幕滑动。首先,创建一个布局文件,包含一个ViewPager:<!--
activity_screen_slide.xml
-->
<android.support.v4.view.ViewPager
xmlns:android="/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>创建一个Activity,包含以下内容:将其ContentView设置为上面创建的布局创建一个FragmentStatePagerAdapter的子类,并实现其getItem()方法来提供页面、getCount()方法来确定页面数量。将FragmentStatePagerAdapter实例和ViewPager实例绑定。处理设备的返回键,使其能够从虚拟的Fragment栈中移除Fragment来实现返回上一页的效果。如果当前已经处于第一页,那么就从Activity中返回。import
android.support.v4.app.Fragment;
import
android.support.v4.app.FragmentManager;
...
public
class
ScreenSlidePagerActivity
extends
FragmentActivity
{
/**
*
The
number
of
pages
(wizard
steps)
to
show
in
this
demo.
*/
private
static
final
int
NUM_PAGES
=
5;
/**
*
The
pager
widget,
which
handles
animation
and
allows
swiping
horizontally
to
access
previous
*
and
next
wizard
steps.
*/
private
ViewPager
mPager;
/**
*
The
pager
adapter,
which
provides
the
pages
to
the
view
pager
widget.
*/
private
PagerAdapter
mPagerAdapter;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_slide);
//
Instantiate
a
ViewPager
and
a
PagerAdapter.
mPager
=
(ViewPager)
findViewById(R.id.pager);
mPagerAdapter
=
new
ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
}
@Override
public
void
onBackPressed()
{
if
(mPager.getCurrentItem()
==
0)
{
//
If
the
user
is
currently
looking
at
the
first
step,
allow
the
system
to
handle
the
//
Back
button.
This
calls
finish()
on
this
activity
and
pops
the
back
stack.
super.onBackPressed();
}
else
{
//
Otherwise,
select
the
previous
step.
mPager.setCurrentItem(mPager.getCurrentItem()
-
1);
}
}
/**
*
A
simple
pager
adapter
that
represents
5
ScreenSlidePageFragment
objects,
in
*
sequence.
*/
private
class
ScreenSlidePagerAdapter
extends
FragmentStatePagerAdapter
{
public
ScreenSlidePagerAdapter(FragmentManager
fm)
{
super(fm);
}
@Override
public
Fragment
getItem(int
position)
{
return
new
ScreenSlidePageFragment();
}
@Override
public
int
getCount()
{
return
NUM_PAGES;
}
}
}使用PageTransformer自定义屏幕滑动效果可以实现ViewPager.PageTransformer接口来展示一个不同于默认实现的屏幕滑动效果。这个接口中只有一个transformPage()方法。在屏幕滑动过程中它会在那些能够看到的页面(当前页面以及邻近页面)上反复调用。例如,假设当前位于第三页,如果用户向第四页滑动,那么transformPage()会在第二、第三、第四页上被调用。当实现transformPage()时,你需要根据页面当前所处的位置(相对于屏幕)来确定它的变化。不同的变化就能带来不同的屏幕滑动效果。页面相对于屏幕的位置包含在参数position中。position指明了一个给定的页面相对于屏幕中心的位置。这是一个动态的属性,会随着用户的滑动手势而变化。当页面充满屏幕时,position的值为0;当页面即将在屏幕左侧消失时,它的值趋近于-1;当页面即将在屏幕右侧消失时,它的值趋近于1。根据position的值,你可以使用setTranslationX()、setScaleY()等方法来实现自定义的动画效果。当实现了一个PageTransformer之后,使用ViewPager的setPageTransformer()方法将动画投入使用。示例如下:ViewPager
mPager
=
(ViewPager)
findViewById(R.id.pager);
...
mPager.setPageTransformer(true,
new
ZoomOutPageTransformer());需要注意的是,默认的屏幕滑动效果不会被PageTransformer覆盖,因此计算属性值是要考虑是否会导致滑动速度变快或是变慢。下面是两个PageTransformer的实现示例:Zoom-outpagetransformerpublic
class
ZoomOutPageTransformer
implements
ViewPager.PageTransformer
{
private
static
final
float
MIN_SCALE
=
0.85f;
private
static
final
float
MIN_ALPHA
=
0.5f;
public
void
transformPage(View
view,
float
position)
{
int
pageWidth
=
view.getWidth();
int
pageHeight
=
view.getHeight();
if
(position
<
-1)
{
//
[-Infinity,-1)
//
This
page
is
way
off-screen
to
the
left.
view.setAlpha(0);
}
else
if
(position
<=
1)
{
//
[-1,1]
//
Modify
the
default
slide
transition
to
shrink
the
page
as
well
float
scaleFactor
=
Math.max(MIN_SCALE,
1
-
Math.abs(position));
float
vertMargin
=
pageHeight
*
(1
-
scaleFactor)
/
2;
float
horzMargin
=
pageWidth
*
(1
-
scaleFactor)
/
2;
if
(position
<
0)
{
view.setTranslationX(horzMargin
-
vertMargin
/
2);
}
else
{
view.setTranslationX(-horzMargin
+
vertMargin
/
2);
}
//
Scale
the
page
down
(between
MIN_SCALE
and
1)
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
//
Fade
the
page
relative
to
its
size.
view.setAlpha(MIN_ALPHA
+
(scaleFactor
-
MIN_SCALE)
/
(1
-
MIN_SCALE)
*
(1
-
MIN_ALPHA));
}
else
{
//
(1,+Infinity]
//
This
page
is
way
off-screen
to
the
right.
view.setAlpha(0);
}
}
}Depthpagetransformerpublic
class
DepthPageTransformer
implements
ViewPager.PageTransformer
{
private
static
final
float
MIN_SCALE
=
0.75f;
public
void
transformPage(View
view,
float
position)
{
int
pageWidth
=
view.getWidth();
if
(position
<
-1)
{
//
[-Infinity,-1)
//
This
page
is
way
off-screen
to
the
left.
view.setAlpha(0);
}
else
if
(position
<=
0)
{
//
[-1,0]
//
Use
the
default
slide
transition
when
moving
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届高考化学二轮复习备考策略 课件
- 2024年知识竞赛-SGMW技能竞赛(车身机器人焊接)笔试参考题库含答案
- 2024年生化化工药品技能考试-溶剂再生装置笔试参考题库含答案
- 2024年环保气象安全技能考试-污水处理工笔试参考题库含答案
- 2024年湖南住院医师-湖南住院医师急诊科笔试参考题库含答案
- 以珍藏为题目300字的作文
- 《剧场建筑设计规范+JGJ+57-2016》详细解读
- 2024年河北住院医师-河北住院医师内科笔试参考题库含答案
- 医用氧气项目市场研究报告及运营管理方案|瑞克咨询|2024年编|
- 2024年水利工程行业技能考试-水工仪器观测工笔试参考题库含答案
- 浅析戏剧影视美术设计专业实践教学改革
- 投标保证保险线上操作流程PPT课件
- 内审管理评审记录范本(共18).doc
- 八年级下册物理期末质量抽测试卷分析
- 智能热水器系统设计
- 屠宰行业清洁生产审核.docx
- 急性心肌梗死和常见心律失常心电图诊断(核心科室培训)PPT参考幻灯片
- 支 款 单
- 室外观光电梯井道钢结构施工方案
- 大学本科生毕业实习工作总结(通用5篇)
- 卸料平台计算书(完整版)
评论
0/150
提交评论