您的位置:首页 > 其它

Activity 切换动画特效

2016-03-01 17:32 369 查看
Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画。
它包括两个部分:

一部分是第一个activity退出时的动画;

另外一部分时第二个activity进入时的动画;

在Android的2.0版本之后,有了一个函数来帮我们实现这个动画。这个函数就是overridePendingTransition

这个函数有两个参数,一个参数是第一个activity进入时的动画,另外一个参数则是第二个activity退出时的动画。

这里需要特别说明的是,关于overridePendingTransition这个函数,有两点需要主意

1.它必需紧挨着startActivity()或者finish()函数之后调用

2.它只在android2.0以及以上版本上适用

//添加界面切换效果,注意只有Android的2.0(SdkVersion版本号为5)以后的版本才支持

int version = Integer.valueOf(android.os.Build.VERSION.SDK);
if(version >= 5) {
overridePendingTransition(R.anim.zoomin, R.anim.zoomout); //此为自定义的动画效果,下面两个为系统的动画效果
//overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
//overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
}

//实现淡入浅出的效果

[html]
view plain
copy
print?

1.startActivity(new Intent(MainActivity.this,SecondActivity.class));

2.overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);

// 由左向右滑入的效果

[html]
view plain
copy
print?

1.startActivity(new Intent(MainActivity.this,SecondActivity.class));

2.overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);

// 实现zoommin 和 zoomout (自定义的动画)

[html]
view plain
copy
print?

1.startActivity(new Intent(OverridePendingTransitionActivity.this,SecondActivity.class));

2.overridePendingTransition(R.anim.zoomin, R.anim.zoomout);

下面为两个自定义的动画效果XML文件,存放位置为:res/anim/

anim/zoomin.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"

android:interpolator="@android:anim/decelerate_interpolator" >

<scale

android:duration="@android:integer/config_mediumAnimTime"

android:fromXScale="0.1"

android:fromYScale="0.1"

android:pivotX="50%p"

android:pivotY="50%p"

android:toXScale="1.0"

android:toYScale="1.0" />

<alpha

android:duration="@android:integer/config_mediumAnimTime"

android:fromAlpha="0"

android:toAlpha="1.0" />

</set>

anim/zoomout.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"

android:interpolator="@android:anim/decelerate_interpolator"

android:zAdjustment="top" >

<scale

android:duration="@android:integer/config_mediumAnimTime"

android:fromXScale="1.0"

android:fromYScale="1.0"

android:pivotX="50%p"

android:toXScale="0.1"

android:toYScale="0.1" />

<alpha

android:duration="@android:integer/config_mediumAnimTime"

android:fromAlpha="1.0"

android:toAlpha="0" />

. </set>

不过有时候overridePendingTransition 这个函数会不起作用,总结下,大概是以下三个方面的原因:

1、android系统版本2.0以下,这个没办法,想其他办法解决切换动画吧。
2、在ActivityGroup等的嵌入式Activity中,这个比较容易解决,用如下方法就可以了:
this.getParent().overridePendingTransition 就可以解决。
3、在一个Activity的内部类中,或者匿名类中,这时候只好用handler来解决了。

new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (LoginUtils.isAutoLogin(WelcomeActivity.this)) {
startActivity(new Intent(WelcomeActivity.this, MainActivity.class));
finish();
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
} else {
startActivity(new Intent(WelcomeActivity.this, LoginActivity.class));
finish();
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
}
}, 2000);


4、手机的显示动画效果被人为或者其他方式给关闭了 现在打开即可 设置->显示->显示动画效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: