您的位置:首页 > 其它

为打开新Activity动作添加动画效果

2013-06-26 14:11 375 查看
为打开Activity动作添加动画效果

1. 代码整理自 Android-8 例子程序 : ApiDemos

2. 实现的方式是调用 Activity 的 overridePendingTransition 方法,这个方法的签名为:
overridePendingTransition(int enterAnim, int exitAnim)
文档对两个参数的解释为:
@param enterAnim : enterAnim A resource ID of the animation resource to use for the incoming activity. Use 0 for no animation.
@param exitAnim : exitAnim A resource ID of the animation resource to use for the outgoing activity. Use 0 for no animation.
这个方法的作用就是在从一个 Activity 在切换到另一个 Activity 的间歇期间,闪电式放两个画面。
第一个参数就是第一个画面,第二个参数是第二个画面。
而,这个画面的效果是以 XML 来定义的,两个参数都是 R 文件中指向两个定义了动画效果的 XML 文件。

2. 下面示例两种动画效果,用于从一个 Activity 切换到另一个 Activity 的动画效果。
一种是淡出式。
一种是 zoom ,是一种页面急速向上卷起的效果。
** 界面布局很简单。在首页上两个按钮,点击后分别以两种效果打开另外一个 Activity
main.xml:

view plain<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/fadeButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="淡出方式打开-Fade">
</Button>
<Button android:id="@+id/zoomButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="上升式打开-Zoom">
</Button>
</LinearLayout>

** 打开后的新的 Activity 显示 "您好"
other.xml:

view plain<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:text="你好"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>

** AndroidManifest.xml 要注册新的那个 Activity

view plain<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="wjh.android"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Mainactivity"
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=".OtherActivity" />
</application>
<uses-sdk android:minSdkVersion="8" />
</manifest>

** 切换代码:MainActivity

view plain/**
* 为打开Activity添加动画效果
*/
public class Mainactivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* 淡出式打开按钮 */
Button button = (Button)findViewById(R.id.fadeButton);
button.setOnClickListener(mFadeListener);
/* 上升式打开按钮 */
button = (Button)findViewById(R.id.zoomButton);
button.setOnClickListener(mZoomListener);
}

/**
* 按钮点击:处理淡出式打开新的 Activity
*/
private OnClickListener mFadeListener = new OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(Mainactivity.this, OtherActivity.class));
overridePendingTransition(R.anim.fade, R.anim.hold);
}
};
/**
* 按钮点击:处理上升式打开新的 Activity
*/
private OnClickListener mZoomListener = new OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(Mainactivity.this, OtherActivity.class));
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
}
};
}

** 动画文件 -- 在res下新建一个文件夹用于存放定义动画,我建了一个anim文件夹
fade.xml
<?xml version="1.0" encoding="utf-8"?>
<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" />

hold.xml
<?xml version="1.0" encoding="utf-8"?>
<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" />

3. 其它效果:
只要拷贝以下效果到 XmL 文件再更改 overridePendingTransition 中的参数就可以了

** 左右滑入式
* push_left_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>
* push_left_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

** 上下滑入式
* push_up_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="300"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>
* push_up_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="0" android:toYDelta="-100%p" android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>

** 浮云式
* hyperspace_in.xml
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" android:startOffset="1200" />
* hyperspace_out.xml

view plain<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="700" />
<set
android:interpolator="@android:anim/accelerate_interpolator"
android:startOffset="700">

<scale
android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />

<rotate
android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />
</set>
</set>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: