最近工作中遇到了大量activity动画的切换场景,在网上找了些资源终于实现了,写一篇简单的blog记录一下
activity转场动画大家都很熟悉一般情况我们会用overridePendingTransition(enterAnim, exitAnim);方法来实现 这个方法是API Level 5 加入的。这个方法在startActivity(Intent) or finish()之后被调用(一定要在之后用才有效果哦),指定接下来的这个转场动画。
方法的第一个参数:enterAnim,是新的Activity的进入动画的resource ID;
方法的第二个参数exitAnim,是旧的Activity(当前的Activity)离开动画的resource ID。
所以这两个参数的对象是两个Activity。如果上面两个参数没有动画要设置,则用0作为参数。
动画的资源文件放在res\anim\目录下,是View Animation。整个动画是增加在activity的window上面,一定注意不要讲activity的背景颜色设置成透明的,要不然就看不到动画效果了。
View Animation包含了基本的动画类型,基本可以满足一般转场动画的需要。 根节点可以是:, , , , interpolator element, 或者是。 利用set可以进行各种嵌套组合。
代码例子
Intent intent = new Intent(TestActivities.this,TestActivityFirst.class);
startActivity(intent);
// transaction animation
overridePendingTransition(R.anim.slide_in_bottom,R.anim.slide_out_bottom);
其中两个动画:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="100%p" android:toYDelta="0"
android:duration="2000"/> // 从屏幕右方滑到屏幕中 持续时间2秒
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="2000" /> // 从完全透明变为完全不透明 持续时间2秒
set>
// 动画和上面的相反
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="0%p" android:toYDelta="100%p"
android:duration="2000"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="2000" />
set>
还有一种给activity增加动画的方式,就是通过theme给activity增加转场动画
首先在res文件夹下建立anim文件夹,然后在里面建立fade_in.xml和fade_out.xml两个动画资源
fade_in.xml // 渐入动画
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
fade_out.xml // 渐出动画
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromAlpha="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="0.0" />
接着声明style 注意 parent 要是theme 单独的style是不能当成主题设置到AndroidManifest.xml中的
也就是说 1是可以设置到android:theme=”“;中的,而2 不可以。
1.
2.
现在有两个activiy A1和A2
当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation 动画加在A1
当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation 动画加在A2
当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation 动画加在A2
当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation 动画加在A1
最后一步在AndroidManifest.xml中的Activity的声明上加入android:theme=”@style/Anim_fade”
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.customanimationforactivity"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
<activity
android:name="com.example.customanimationforactivity.MainActivity"
android:label="@string/app_name"
android:theme="@style/Anim_fade" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<activity android:name=".AppActivity" android:theme="@style/Anim_fade" >
activity>
application>
manifest>
关于activity动画就介绍这么多 其中参考了别人的文章,写下来仅仅为了自己以后少走弯路参考文章如下
http://blog.csdn.net/lmj623565791/article/details/22990643
http://blog.csdn.net/wangjia55/article/details/42556989
下面再接收一下fragment的切换动画
我再工作中也用到了两种方式
自定义转场动画是通过setCustomAnimations()方法,因为Fragment添加时可以指定加入到Back Stack中,所以转场动画有add、replace、remove 从Back stack中pop出来,四种情况。
注意setCustomAnimations()方法必须在add、remove、replace调用之前被设置,否则不起作
private void addFragment() {
if (null == mFragmentManager) {
mFragmentManager = getSupportFragmentManager();
}
mTextFragmentOne = new MyFragmentOne();
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.setCustomAnimations(
R.anim.push_left_in,
R.anim.push_left_out,
R.anim.push_left_in,
R.anim.push_left_out);
fragmentTransaction.add(R.id.container, mTextFragmentOne);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
动画的资源文件就不写了 很简单大家自己写一下就可以了。
/**
* Called when a fragment loads an animation.
*/
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
return null;
}
如果你写的Fragment子类在继承Fragment后重写了这个方法内容,就可以在这里面得到动画。
这个方法可以实现某一个fragment的动画 具体怎么用每一个参数是什么意思,大家可以看一下google官方文档,用起来很简单。
希望 能帮助需要的人。