Activity之间的动画需要使用Tween动画来实现.主要的实现方法是在对2个Activity进行切换的时候,紧跟一个overridePendingTransition方法,这个方法必须紧跟在startActivity()方法或者finish()方法之后,这个是API文档中所述.
举例如下 :
Intent intent = new Intent(MainActivity.this, SecondActivity.class); //MainActivity 为第一个Activity名,SecondActivity为第二个的名字;
startActivity(intent);
overridePendingTransition(这里写anim的资源ID, 这里写anim的资源ID);//anim的资源一般防止在res/anim 文件目录下.引用使用R.anim.XXX语句;
我在网上搜索到了一些有用的资源,在这里分享一下,是关于XML的一套动画实现的,里面有对xml动画中的一些属性进行讲解,方便更好的理解书写过程. 这是网址: http://download.youkuaiyun.com/detail/iloveyoueveryday/6909031
这里是贡献值(原博主)的博客: http://blog.youkuaiyun.com/i5suoi/article/details/19034257
这里是对Tween动画的一些介绍,如果看了XML文件的话,有些属性不明白,这里面都有介绍.
http://blog.youkuaiyun.com/feng88724/article/details/6318430.
接下来介绍我写的Demo.
我在Demo中使用Spinner来对多个动画的名称进行匹配.
这是Spinner的所需要的字符串数组.把这段话复制到res/values/strings.xml文件下即可
<string-array name="AnimationName">
<item >淡入淡出</item>
<item>缩小淡入淡出</item>
<item>放大淡入淡出</item>
<item>放大切入切出</item>
<item>缩小切入切出</item>
<item>上滑切入切出</item>
<item>下滑切入切出</item>
<item>左滑切入切出</item>
<item>右滑切入切出</item>
<item>旋转飞入飞出</item>
</string-array>
然后需要在layout文件中来指定spinner控件的entries属性,该属性名即为 上方代码中的 AnimationName .
我在主界面放置了一个Button和Spinner.当点击button的时候,通过Spinner对象的getSelectId()方法来获取点击的item号,注意这是从0开始且返回值为long.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".SecondActivity">
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/AnimationName"
android:spinnerMode="dialog"
/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click"/>
</LinearLayout><span style="color:#ff0000;font-weight: bold;">
</span>
然后在主Activity中获取Button并设置点击事件.
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
selectId = (int) spinner.getSelectedItemId();
// overridePendingTransition(android.R.anim.slide_out_right, android.R.anim.slide_in_left); //android本身也提供相关动画.
if (selectId < AnimationInIds.length && selectId > -1) {
setAnimation(selectId);
} else {
showTip();
}
startActivity(intent);
overridePendingTransition(AnimationInId, AnimationOutId);
}
//下面这一种方法也可以,这是将当前想要做的动作加入消息队列中,但有1000ms的延迟.
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
finish();
overridePendingTransition(资源ID, 资源ID);
}
},1000);
这是项目的github地址 : https://github.com/JavaSuperior/AnimationBetweenActivities .