Activity的屏幕切换动画.docx_第1页
Activity的屏幕切换动画.docx_第2页
Activity的屏幕切换动画.docx_第3页
Activity的屏幕切换动画.docx_第4页
Activity的屏幕切换动画.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

VIP免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android的Activity屏幕切换动画(一)-左右滑动切换这段时间一直在忙Android的项目,总算抽出点时间休息一下,准备把一些项目用到的Android经验分享一下。在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity增加了一个方法:public voidoverridePendingTransition(int enterAnim, int exitAnim)其中:enterAnim 定义Activity进入屏幕时的动画exitAnim 定义Activity退出屏幕时的动画overridePendingTransition方法必须在startActivity()或者finish()方法的后面。如:进入动画切换:startActivity(searchBookIntent);/进入动画overridePendingTransition(R.anim.slide_in_up, R.anim.slide_out_down);退出动画切换:要在该activity中重写 finish()方法,并且动画要放在super语句后。Overridepublic void finish() /一定要方法切换动画前super.finish();/结束当前activity 的切换动画overridePendingTransition(R.anim.slide_in_up, R.anim.slide_out_down);Android已经内置了几种动画效果,可以见android.R.anim 类。一般情况下我们需要自己定义屏幕切换的效果。首先我们先了解Activity的位置定义,如下图:从上图可以看出,以手机屏幕下面边未X轴,屏幕左边为Y轴,当Activity在X轴值为-100%p时,刚好在屏幕的左边(位置1),当X轴值为0%p时,刚好再屏幕内(位置2),当X=100%p时刚好在屏幕右边(位置3)。清楚了位置后,我们就可以实现左右滑动的切换效果,首先让要退出的Activity从位置2移动到位置1,同时让进入的Activity从位置3移动位置2,这样就能实现从左右切换效果。实现过程如下,首先定义2个动画,在 res目录创建anim目录, 然后在目录创建动画的xml文件:out_to_left.xml (从左边退出动画) 、in_from_right.xml(从右边进入动画)out_to_left.xml(从 位置2 移动到 位置1)android :anim/accelerate_interpolatorin_from_right.xml(从 位置3 移动到 位置2)android :anim/accelerate_interpolator注:android:fromXDelta 动画开始的位置,android:toXDelta动画结束的位置,android:duration动画的时间。Android 代码如下:public class LeftRightSlideActivity extends Activity Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(View v) Intent intent = new Intent();intent.setClass(LeftRightSlideActivity.this, SlideSecondActivity.class);startActivity(intent);/设置切换动画,从右边进入,左边退出overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);); 效果图如下: 虽然左右滑动切换的实现很简单,但是对于原理的理解很重要,掌握了原理可以充分发挥想象力设计出各种各样的动画效果,希望对一些入门的新手有帮助。Android的Activity屏幕切换动画(二)-左右滑动深入与实战上一篇文章讲了Android的左右滑动切换,实现过程是非常简单,一些新手可能会向深入了了解Activity切换的原理,下面主要对左右滑动进行深入的探讨,并以项目中的一个切换效果来进一步了解。Activity的切换效果使用的是Android的动画效果,Android的动画在官方有相关资料:/guide/topics/graphics/animation.html和/guide/topics/resources/animation-resource.html,Activity的切换动画实际上是Android的View Animation(视图动画)中的Tween Animation效果,Tween Animation分为4种动画效果,分别是:alpha (透明变化) translate(位置移动) scale(缩放) rotate(旋转),而左右滑动切换使用的是translate(位置移动)的效果,在下一篇我们再讨论一下alpha (透明变化)、scale(缩放)、rotate(旋转)这三种效果,本篇只将translate(位置移动)。Translate动画是非常好理解,就是定义一个开始的位置和一个结束位置,定义移动时间,然后就能自动产生移动动画。Android的translate移动方向有横向(X)竖向(Y),左右滑动使用了横向移动效果,对于竖向(Y)的位置如下:定义一个向上退出的动画(从位置2移动位置3)和从下面进入(从位置1移动位置2)的动画定义文件如下:out_to_up.xml (从屏幕上面退出)in_from_down.xml (从屏幕下面进入)接下来讲一讲translate的几个重要的属性:android:interpolator:加速器,非常有用的属性,可以简单理解为动画的速度,可以是越来越快,也可以是越来越慢,或者是先快后忙,或者是均匀的速度等等,对于值如下:android:anim/accelerate_interpolator:越来越快android:anim/decelerate_interpolator:越来越慢android:anim/accelerate_decelerate_interpolator:先快后慢android:anim/anticipate_interpolator:先后退一小步然后向前加速android:anim/overshoot_interpolator:快速到达终点超出一小步然后回到终点android:anim/anticipate_overshoot_interpolator:到达终点超出一小步然后回到终点android:anim/bounce_interpolator:到达终点产生弹球效果,弹几下回到终点android:anim/linear_interpolator:均匀速度。android:duration:动画运行时间,定义在多次时间(ms)内完成动画android:startOffset:延迟一定时间后运行动画fromXDelta:X轴方向开始位置,可以是%,也可以是具体的像素具体见图toXDelta:X轴方向结束位置,可以是%,也可以是具体的像素fromYDelta:Y轴方向开始位置,可以是%,也可以是具体的像素toYDelta:Y轴方向结束位置,可以是%,也可以是具体的像素当你了解上面的属性后,你可以组合出很多有趣的位置移动效果。比如使用加速器:android:anim/bounce_interpolator可以产生弹球落地时的效果。在实际项目中需要在进行只使用“左右上下滑动”的效果可能还不够炫,希望在切换时能产生更动态的效果,比如开始切换时第1个Activity先向后退一步,然后在向左方向退出屏幕。然后第2个Activity紧跟后面从右边进入屏幕,到达终点时有一个动态效果。在了解了动画加速器后,大家都知道可以采用:anticipate_overshoot_interpolator、anticipate_interpolator、overshoot_interpolator这三个加速器实现左右滑动切换时启动或者结束的动态效果。动画文件定义如下:dync_out_to_left.xmldync_in_from_right.xml但是再使用以上动画配置,会出现以下问题:1.第1个Activity使用anticipate_interpolator时,开始移动时先向后退一步,然后向前移动。但向后退一步步伐太大,略显夸张,实际应用中只希望退后一小小步就行了。2.由于开始向后退一步,额外增加了移动时间,导致前一Activity和后一个Activity的时间不同步。为了解决以上问题,重新定义动态效果,将第1个Activity的移动分为2个动画效果:(1)用200毫秒时间先向后移动2%p的位置(2)延迟200毫秒后从2%p位置向前移动到-100%p位置。然后第2个Activity从延迟200毫秒然后从102%p位置移动到0%p位置。动画定义如下:new_dync_out_to_left.xmlnew_dync_in_from_right.xml解决overridePendingTransition在真机上运行无效刚刚学习APIDemo时看App-Activity-Animation这个例子时发现在真机上跑,页面切换时并没有出现动画效果。到网上查了一下,发现也有一部分人遇到此类情况,终于还是在网上找到了一些办法。Ive managed to solve this problem. In case anyone else is having the same issue, the solution was to add support for largeScreen and anyDensity into the manifest file:17把上面的代码复制到APIDemos里的manifest里去,发现还是没有效果。接着找还有一句话:It seems that all our troubles are caused by an option in Settings / Display. Namely that window animations are turned off by default.意思是在设置-显示-动画-全部动画,因为真机默认的是没有动画效果的(我的机器是摩托MB855)。经过上面两步之后,再运行APIDemo App-Activity-Animation这个例子时就会有对应的动画到这里问题已经解决,下面附附一些activity切换时的overridePendingTransition动画效注意,切换方法overridePendingTransition只能在startActivity和finish方法之后调用。第一个参数为第一个Activity离开时的动画,第二参数为所进入的Activity的动画效果淡入淡出效果overridePendingTransition(R.anim.fade, R.anim.hold);放大淡出效果overridePendingTransition(R.anim.my_scale_action,R.anim.my_alpha_action);转动淡出效果overridePendingTransition(R.anim.scale_rotate,R.anim.my_alpha_action);转动淡出效果overridePendingTransition(R.anim.scale_translate_rotate,R.anim.my_alpha_action);左上角展开淡出效果overridePendingTransition(R.anim.scale_translate,R.anim.my_alpha_action);压缩变小淡出效果overridePendingTransition(R.anim.hyperspace_in,R.anim.hyperspace_out);右往左推出效果overridePendingTransition(R.anim.push_left_in,R.anim.push_left_out);下往上推出效果overridePendingTransition(R.anim.push_up_in,R.anim.push_up_o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论