如何设定Android Activity间切换时的动画
本代码示例介绍如何设定Activity间切换时的动画效果。本示例使用Eclipse的Android工程编译测试。
1. 定义清单文件(AndroidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.android.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Animation"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Controls1"
android:label="@string/app_name"
android:theme="@android:style/Theme.Light">
</activity>
</application>
<uses-sdk android:minSdkVersion="9" />
</manifest>
2. 定义字符串资源(res/values/strings.xml)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World,Aniation!</string>
<string name="app_name">Animation</string>
<string name="activity_animation_msg">Press a button to launch an activity with a custom animation.</string>
<string name="activity_animation_fade">Fade in</string>
<string name="activity_animation_zoom">Zoom in</string>
<string name="controls_1_save">Save</string>
<string name="controls_1_checkbox_1">Checkbox 1</string>
<string name="controls_1_checkbox_2">Checkbox 2</string>
<string name="controls_1_radiobutton_1">RadioButton 1</string>
<string name="controls_1_radiobutton_2">RadioButton 2</string>
<string name="controls_1_star">Star</string>
<string name="textColorPrimary">textColorPrimary</string>
<string name="textColorSecondary">textColorSecondary</string>
<string name="textColorTertiary">textColorTertiary</string>
<string name="listSeparatorTextViewStyle">listSeparatorTextViewStyle</string>
</resources>
3. 定义渐入动画资源定义(res/anim/fade.xml、res/anim/hold.xml)
res/anim/fade.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!-- 声明动画对象的透明度,本例使用渐入的方式,显示Activity
属性说明参照zoom_exit.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" />
res/anim/hold.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!-- 声明动画对象的水平和垂直移动量,本例使用水平移动方式,
android:interpolator:指定在设定时间内动画移动过程中插补器,用于改善动画的平滑度
android:fromXDelta:指定动画开始时,动画对象的水平位置,可以用像素智设定,也可以用
相对父窗口宽度的百分比来设定。
android:toXDelta:指定动画结束时,动画对象的水平位置,可以用像素值来设定,也可以用
相对父窗口宽度的百分比来设定。
android:duration:指定动画的播放时间
-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="0" android:toXDelta="0"
android:duration="@android:integer/config_longAnimTime" />
4. 定义缩放动画资源定义(res/anim/zoom_enter.xml、res/anim/zoom_exit.xml)
res/anim/zoom_enter.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!-- 声明动画对象进入屏幕时的动画资源
android:interpolator:指定在设定时间内动画移动过程中插补器,用于改善动画的平滑度
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator">
<!-- 声明动画对象进入屏幕时的缩放动画,
属性说明参照zoom_exit.xml -->
<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>
res/anim/zoom_exit.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!-- 声明Activity退出时使用的动画资源
android:interpolator:指定在设定时间内动画移动过程中插补器,用于改善动画的平滑度
android:zAdjustment:允许再动画播放期间,调整播放内容在Z轴方向的顺序,normal(0):真正播放的
动画内容保持当前的Z轴顺序,top(1):在动画播放期间,强制把当前播放的内容放到其他内容的上面;
bottom(-1):在动画播放期间,强制把当前播放的内容放到其他内容之下。
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top">
<!-- 指定动画对象的缩放因子和播放时间
android:fromXScale和android:toXScale指定X轴的动画开始和结束时的缩放因子
android:fromYScale和android:toYScale指定Y轴的动画开始和结束时的缩放因子
android:pivoteX:在动画对象被缩放时,X轴要保留的原始尺寸的百分比。
android:pivoteY:在动画对象被缩放时,Y轴要保留的原始尺寸的百分比。
android:duration指定动画的播放时间
-->
<scale android:fromXScale="1.0" android:toXScale=".5"
android:fromYScale="1.0" android:toYScale=".5"
android:pivotX="50%p" android:pivotY="50%p"
android:duration="@android:integer/config_mediumAnimTime" />
<!-- 定义动画对象的透明度,该动画在动画缩放之后播放。
android:fromAlpha:指定动画初始时的透明度
android:toAlpha:指定动画结束时的透明度
android:duratiion:指定动画透明处理的执行时间
-->
<alpha android:fromAlpha="1.0" android:toAlpha="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
5. 定义布局Activity布局资源(res/layout/activity_animation.xml、res/layout/controls_1.xml)
res/layout/activity_animation.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_weight="0"
android:paddingBottom="4dip"
android:text="@string/activity_animation_msg"/>
<Button android:id="@+id/fade_animation"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="@string/activity_animation_fade">
<requestFocus />
</Button>
<Button android:id="@+id/zoom_animation"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="@string/activity_animation_zoom">
</Button>
</LinearLayout>
res/layout/controls_1.xml文件
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/button"
android:text="@string/controls_1_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<CheckBox android:id="@+id/check1"
android:paddingBottom="24sp"
android:paddingTop="24sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/controls_1_checkbox_1" />
<CheckBox android:id="@+id/check2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/controls_1_checkbox_2" />
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/controls_1_radiobutton_1" />
<RadioButton android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/controls_1_radiobutton_2" />
</RadioGroup>
<CheckBox android:id="@+id/star"
style="?android:attr/starStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/controls_1_star" />
<ToggleButton android:id="@+id/toggle1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ToggleButton android:id="@+id/toggle2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<Spinner android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:text="@string/textColorPrimary"
android:textAppearance="?android:attr/textAppearanceLarge"
android:focusable="true"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:text="@string/textColorSecondary"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?android:attr/textColorSecondary"
android:focusable="true"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:text="@string/textColorTertiary"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?android:attr/textColorTertiary"
android:focusable="true"
/>
<TextView
style="?android:attr/listSeparatorTextViewStyle"
android:text="@string/listSeparatorTextViewStyle"
android:layout_marginTop="5dip"
/>
</LinearLayout>
</ScrollView>
6. 创建Activity窗口(Animation.java、Controls1.java)
Animation.java文件
package my.android.test;
import android.app.Activity;
import android.os.Bundle;
import android.content.ComponentName;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
publicclass Animationextends Activity {
/** Activity在首次创建时调用这个方法 */
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//填充布局
setContentView(R.layout.activity_animation);
//查找渐入动画启动按钮,并设置Click事件监听器
Button button = (Button)findViewById(R.id.fade_animation);
button.setOnClickListener(mFadeListener);
//查找缩放动画启动按钮,并设置Click事件监听器
button = (Button)findViewById(R.id.zoom_animation);
button.setOnClickListener(mZoomListener);
}
/**
* 启动一个新的Activity,新旧Activity之间切换时,新的Activity使用渐入
* 的方式启动。
*/
private OnClickListenermFadeListener =new OnClickListener(){
publicvoid onClick(View v){
//启动Controls1的Activity
startActivity(new Intent(Animation.this, Controls1.class));
//在startActivity()方法之后立即调用,设定新的Activity进入和
//当前Activity退出时的动画。
overridePendingTransition(R.anim.fade, R.anim.hold);
}
};
/**
* 启动一个新的Activity,新旧Activity之间切换时,采用缩放的方式启动新的的Activity。
*/
private OnClickListenermZoomListener =new OnClickListener(){
publicvoid onClick(View v){
//启动Controls1的Activity
startActivity(new Intent(Animation.this, Controls1.class));
//在startActivity()方法之后立即调用,设定新的Activity进入和
//当前Activity退出时的动画。
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
}
};
}
Controls1.java文件
package my.android.test;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
publicclass Controls1extends Activity {
//设定字符串数组,用于下拉列表中的单选项
privatestaticfinal String[]mStrings = {
"Mercury", "Venus","Earth", "Mars", "Jupiter","Saturn", "Uranus", "Neptune"
};
/**
* 该Activity首次创建时,会调用这个方法。
*/
@Override
protectedvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//填充布局
setContentView(R.layout.controls_1);
//查找布局中的下拉列表组件
Spinner s1 = (Spinner)findViewById(R.id.spinner1);
//用字符串数组初始数组适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item,mStrings);
//给适配器的下拉列表设置布局资源
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//把字符数组适配器与下拉列表组件关联在一起。
s1.setAdapter(adapter);
}
}