【起航计划 004】2015 起航计划 Android APIDemo的魔鬼步伐 03 App->Activity->Animation Activity跳转动画 R.anim.×× overridePendingTransition ActivityOptions类
2015-02-28 17:13
169 查看
App->Activity->Animation示例用于演示不同Activity切换时动态效果。
android 5.0例子中定义了6种动画效果:
Android 中 Animation 资源可以分为两种:
Tween Animation 对单个图像进行各种变换(缩放,平移,旋转等)来实现动画。
Frame Animation 由一组图像顺序显示显示动画。
Animation 中使用的是Tween Animation, 使用的资源为R.anim.fade, R.anim.hold,R.anim.zoom_enter, R.anim.zoom_exit。
其中R.anim.fade, R.anim.zoom_enter分别为Fade In 和 Zoom动画资源。其定义为
fade.xml
zoom_center.xml
tween animation 资源定义的格式如下:
<set> 为其它animation类型<alpha>,<scale>,<translate>和<rotate>或其它<set>的容器。
android:interpolator 为Interpolator资源ID,Interpolator定义了动画的变化速率,动画的各帧的显示可以加速,减速,重复显示。
android:shareInterpolator 如果想为<set>中的各个子动画定义共享interpolator,shareInterpolator 则设为true.
<alpha> 定义Fade in ,Fade out 动画,其对应的Android类AlphaAnimation,参数由fromAlpha,toAlpha定义。
<scale>定义缩放动画,其对应的Android类为ScaleAnimation,参数由 fromXScale,toXScale,fromYScale,toYScale,pivotX,pivotY定义,pivotX,pivotY定义了 缩放时的中心。
<translate>定义平移动画,其对应的Android类为TranslateAnimation,参数由fromXDelta,toXDelta,fromYDelta,toYDelta定义。
<rotate>定义选择动画,其对应的Android类RotateAnimation,参数由fromDegrees,toDegrees,pivotX,pivotY, pivotX,pivotY定义选择中心。
Animation中的Fade In和Zoom In按钮的事件处理代码:
从代码可以看到Activity Animation到其它Activity Controls1 切换的动画使用overridePendingTransition 来定义,函数overridePendingTransition(int enterAnim, int exitAnim) 必须定义在StartActivity(Intent)或是 Activity.finish()之后来定义两个Activity切换时的动画,enterAnim 为新Activity出现时动画效果,exitAnim则定义了当前Activity退出时动画效果。
剩下的Modern fade In, Modern zoom in, Scale up ,Thumbnail zoom使用ActivityOptions实现Activity跳转的动画效果:
Activity跳转动画是指一个Activity跳转到另外一个Activity的动画效果,我们可以通过Acitivity的overridePendingTransition()方法实现跳转动画。
这个函数接受两个参数:
第一个参数为第一个Activity退出时的动画
第二个参数为第二个Activity进入时的动画
这个方法必须在startActivity方法或者finish方法之后调用。
示例:
Android 4.1(API16)提供了一个新类ActivityOptions,用来实现Activity的切换动画。
ActivityOptions类提供了三个方法
makeCustomAnimation() 创建一个动画,由你自己的资源所定义:一个用来定义活动开启的动画,一个用来定义活动被关闭的动画。
makeScaleUpAnimation() 创建一个动画,能够从屏幕指定的位置和指定的大小拉伸一个活动窗口。例如,当打开一个应用时,Android 4.1的主屏幕使用了这个方法。
makeThumbnailScaleUpAnimation() 创建一个动画,能够从屏幕指定的位置和提供的缩略图拉伸一个活动窗口。例如,在Android 4.1的最近使用程序窗口中,当往回一个应用程序时使用了这个动画。
通过这三个方法中的一个就可以创建一个ActivityOptions示例,然后调用toBundle()方法获取一个Bundle对象,传递给startActivity方法。
示例:
android 5.0例子中定义了6种动画效果:
渐变Fade In 缩放Zoom In Modern fade In Modern zoom in Scale up Thumbnail zoom
Android 中 Animation 资源可以分为两种:
Tween Animation 对单个图像进行各种变换(缩放,平移,旋转等)来实现动画。
Frame Animation 由一组图像顺序显示显示动画。
Animation 中使用的是Tween Animation, 使用的资源为R.anim.fade, R.anim.hold,R.anim.zoom_enter, R.anim.zoom_exit。
其中R.anim.fade, R.anim.zoom_enter分别为Fade In 和 Zoom动画资源。其定义为
fade.xml
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_longAnimTime" />
zoom_center.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="2.0" android:toXScale="1.0" android:fromYScale="2.0" android:toYScale="1.0" android:pivotX="50%p" android:pivotY="50%p" android:duration="@android:integer/config_mediumAnimTime" /> </set>
tween animation 资源定义的格式如下:
<?xml version=”1.0″ encoding=”utf-8″?> <set xmlns:android=”http://schemas.android.com/apk/res/android” android:interpolator=”@[package:]anim/interpolator_resource” android:shareInterpolator=[ ” true ” false “> <alpha android:fromAlpha=”float” android:toAlpha=”float” /> <scale android:fromXScale=”float” android:toXScale=”float” android:fromYScale=”float” android:toYScale=”float” android:pivotX=”float” android:pivotY=”float” /> <translate android:fromXDelta=”float” android:toXDelta=”float” android:fromYDelta=”float” android:toYDelta=”float” /> <rotate android:fromDegrees=”float” android:toDegrees=”float” android:pivotX=”float” android:pivotY=”float” /> <set> … </set> </set>
<set> 为其它animation类型<alpha>,<scale>,<translate>和<rotate>或其它<set>的容器。
android:interpolator 为Interpolator资源ID,Interpolator定义了动画的变化速率,动画的各帧的显示可以加速,减速,重复显示。
android:shareInterpolator 如果想为<set>中的各个子动画定义共享interpolator,shareInterpolator 则设为true.
<alpha> 定义Fade in ,Fade out 动画,其对应的Android类AlphaAnimation,参数由fromAlpha,toAlpha定义。
<scale>定义缩放动画,其对应的Android类为ScaleAnimation,参数由 fromXScale,toXScale,fromYScale,toYScale,pivotX,pivotY定义,pivotX,pivotY定义了 缩放时的中心。
<translate>定义平移动画,其对应的Android类为TranslateAnimation,参数由fromXDelta,toXDelta,fromYDelta,toYDelta定义。
<rotate>定义选择动画,其对应的Android类RotateAnimation,参数由fromDegrees,toDegrees,pivotX,pivotY, pivotX,pivotY定义选择中心。
Animation中的Fade In和Zoom In按钮的事件处理代码:
private OnClickListener mFadeListener = new OnClickListener() { public void onClick(View v) { // Request the next activity transition (here starting a new one). startActivity(new Intent(Animation.this, AlertDialogSamples.class)); // Supply a custom animation. This one will just fade the new // activity on top. Note that we need to also supply an animation // (here just doing nothing for the same amount of time) for the // old activity to prevent it from going away too soon. overridePendingTransition(R.anim.fade, R.anim.hold); } }; private OnClickListener mZoomListener = new OnClickListener() { public void onClick(View v) { // Request the next activity transition (here starting a new one). startActivity(new Intent(Animation.this, AlertDialogSamples.class)); // This is a more complicated animation, involving transformations // on both this (exit) and the new (enter) activity. Note how for // the duration of the animation we force the exiting activity // to be Z-ordered on top (even though it really isn't) to achieve // the effect we want. overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit); } };
从代码可以看到Activity Animation到其它Activity Controls1 切换的动画使用overridePendingTransition 来定义,函数overridePendingTransition(int enterAnim, int exitAnim) 必须定义在StartActivity(Intent)或是 Activity.finish()之后来定义两个Activity切换时的动画,enterAnim 为新Activity出现时动画效果,exitAnim则定义了当前Activity退出时动画效果。
剩下的Modern fade In, Modern zoom in, Scale up ,Thumbnail zoom使用ActivityOptions实现Activity跳转的动画效果:
private OnClickListener mModernFadeListener = new OnClickListener() { public void onClick(View v) { // Create the desired custom animation, involving transformations // on both this (exit) and the new (enter) activity. Note how for // the duration of the animation we force the exiting activity // to be Z-ordered on top (even though it really isn't) to achieve // the effect we want. ActivityOptions opts = ActivityOptions.makeCustomAnimation(Animation.this, R.anim.fade, R.anim.hold); // Request the activity be started, using the custom animation options. startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle()); } }; private OnClickListener mModernZoomListener = new OnClickListener() { public void onClick(View v) { // Create a more complicated animation, involving transformations // on both this (exit) and the new (enter) activity. Note how for // the duration of the animation we force the exiting activity // to be Z-ordered on top (even though it really isn't) to achieve // the effect we want. ActivityOptions opts = ActivityOptions.makeCustomAnimation(Animation.this, R.anim.zoom_enter, R.anim.zoom_enter); // Request the activity be started, using the custom animation options. startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle()); } }; private OnClickListener mScaleUpListener = new OnClickListener() { public void onClick(View v) { // Create a scale-up animation that originates at the button // being pressed. ActivityOptions opts = ActivityOptions.makeScaleUpAnimation( v, 0, 0, v.getWidth(), v.getHeight()); // Request the activity be started, using the custom animation options. startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle()); } }; private OnClickListener mZoomThumbnailListener = new OnClickListener() { public void onClick(View v) { // Create a thumbnail animation. We are going to build our thumbnail // just from the view that was pressed. We make sure the view is // not selected, because by the time the animation starts we will // have finished with the selection of the tap. v.setDrawingCacheEnabled(true); v.setPressed(false); v.refreshDrawableState(); Bitmap bm = v.getDrawingCache(); Canvas c = new Canvas(bm); //c.drawARGB(255, 255, 0, 0); ActivityOptions opts = ActivityOptions.makeThumbnailScaleUpAnimation( v, bm, 0, 0); // Request the activity be started, using the custom animation options. startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle()); v.setDrawingCacheEnabled(false); } };
Activity跳转动画是指一个Activity跳转到另外一个Activity的动画效果,我们可以通过Acitivity的overridePendingTransition()方法实现跳转动画。
这个函数接受两个参数:
第一个参数为第一个Activity退出时的动画
第二个参数为第二个Activity进入时的动画
这个方法必须在startActivity方法或者finish方法之后调用。
示例:
Intent intent = new Intent(MainActivity.this,OtherActivity.class); startActivity(intent); overridePendingTransition(R.anim.push_up_in,R.anim.push_up_out);
Android 4.1(API16)提供了一个新类ActivityOptions,用来实现Activity的切换动画。
ActivityOptions类提供了三个方法
makeCustomAnimation() 创建一个动画,由你自己的资源所定义:一个用来定义活动开启的动画,一个用来定义活动被关闭的动画。
makeScaleUpAnimation() 创建一个动画,能够从屏幕指定的位置和指定的大小拉伸一个活动窗口。例如,当打开一个应用时,Android 4.1的主屏幕使用了这个方法。
makeThumbnailScaleUpAnimation() 创建一个动画,能够从屏幕指定的位置和提供的缩略图拉伸一个活动窗口。例如,在Android 4.1的最近使用程序窗口中,当往回一个应用程序时使用了这个动画。
通过这三个方法中的一个就可以创建一个ActivityOptions示例,然后调用toBundle()方法获取一个Bundle对象,传递给startActivity方法。
示例:
Intent intent = new Intent(MainActivity.this,OtherActivity.class); ActivityOptions opts = ActivityOptions.makeCustomAnimation(MainActivity.this, R.anim.fade, R.anim.hold); startActivity(intent, opts.toBundle());
相关文章推荐
- 【起航计划 004】2015 起航计划 Android APIDemo的魔鬼步伐 03 App-&gt;Activity-&gt;Animation Activity跳转动画 R.anim.&#215;&#215; overridePendingTran
- 【起航计划 008】2015 起航计划 Android APIDemo的魔鬼步伐 07 App-&gt;Activity-&gt;Persistent State 保存状态 SharedPreferences onPause onResume
- 【起航计划 011】2015 起航计划 Android APIDemo的魔鬼步伐 10 App-&gt;Activity-&gt;Reorder Activities 后退栈 Intent FLAG
- 【起航计划 013】2015 起航计划 Android APIDemo的魔鬼步伐 12 App->Activity->SetWallpaper 设置壁纸 WallpaperManager getDrawingCache使用
- 【起航计划 006】2015 起航计划 Android APIDemo的魔鬼步伐 05 App-&gt;Activity-&gt;Custom Title 自定义标题栏
- 【起航计划 012】2015 起航计划 Android APIDemo的魔鬼步伐 11 App-&gt;Activity-&gt;Save &amp; Restore State onSaveInstanceState onRestoreInstance
- 【起航计划 008】2015 起航计划 Android APIDemo的魔鬼步伐 07 App->Activity->Persistent State 保存状态 SharedPreferences onPause onResume
- 【起航计划 014】2015 起航计划 Android APIDemo的魔鬼步伐 13 App->Activity->Translucent 半透明Activity Theme.Translucent
- 【起航计划 010】2015 起航计划 Android APIDemo的魔鬼步伐 09 App->Activity->Redirection 根据shared preferences是否有值决定是否redirect
- 【起航计划 022】2015 起航计划 Android APIDemo的魔鬼步伐 21 App-&gt;Launcher Shortcuts 为某个非主Activity在Home Screen上建立一个快捷方式
- 【起航计划 010】2015 起航计划 Android APIDemo的魔鬼步伐 09 App-&gt;Activity-&gt;Redirection 根据shared preferences是否有值决定是否redirect
- 【起航计划 006】2015 起航计划 Android APIDemo的魔鬼步伐 05 App->Activity->Custom Title 自定义标题栏
- 【起航计划 016】2015 起航计划 Android APIDemo的魔鬼步伐 15 App-&gt;Activity-&gt;Wallpaper 系统壁纸作为当前Activity的背景
- 【起航计划 015】2015 起航计划 Android APIDemo的魔鬼步伐 14 App->Activity->Translucent Blur 模糊背景
- 【起航计划 028】2015 起航计划 Android APIDemo的魔鬼步伐 27 App->Preferences->Launching preferences 其他activity获取Preference中的值
- 【起航计划 014】2015 起航计划 Android APIDemo的魔鬼步伐 13 App-&gt;Activity-&gt;Translucent 半透明Activity Theme.Translucent
- 【起航计划 005】2015 起航计划 Android APIDemo的魔鬼步伐 04 App-&gt;Activity-&gt;Custom Dialog Dialog形式的Activity,Theme的使用,Shape的使用
- 【起航计划 005】2015 起航计划 Android APIDemo的魔鬼步伐 04 App->Activity->Custom Dialog Dialog形式的Activity,Theme的使用,Shape的使用
- 【起航计划 028】2015 起航计划 Android APIDemo的魔鬼步伐 27 App-&gt;Preferences-&gt;Launching preferences 其他activity获取Preference中的值
- 【起航计划 016】2015 起航计划 Android APIDemo的魔鬼步伐 15 App->Activity->Wallpaper 系统壁纸作为当前Activity的背景