我正在编写我的徽标活动和我的主要活动之间的过渡效果,但我有一个问题,即在消失之前活动移到顶部:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<alpha
android:duration="2000"
android:fromAlpha="0.0"
android:toAlpha="1.0" >
</alpha>
</set>
我如何改进此代码才能获得消失效果?
答案 0 :(得分:206)
您可以创建自己的 .xml动画文件以淡化新的Activity
并淡出当前的Activity
:
fade_in.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="500" />
fade_out.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="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
在代码中使用它:(在Activity
内)
Intent i = new Intent(this, NewlyStartedActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
以上代码将淡出当前有效的Activity
并淡入新启动的Activity
,从而实现平稳过渡。
<强>更新强>: @Dan J指出,使用内置的Android动画可以提高性能,我确实在做了一些测试后发现了这种情况。如果您更喜欢使用内置动画,请使用:
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
请注意,引用android.R
代替R
来访问资源ID。
更新:现在通常使用Transition class introduced in API level 19执行转换。
答案 1 :(得分:17)
您还可以在onCreate方法中添加动画,如下所示,因为overridePendingTransition不能用于某些移动设备,或者它取决于设备设置......
View view = findViewById(android.R.id.content);
Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in);
mLoadAnimation.setDuration(2000);
view.startAnimation(mLoadAnimation);
答案 2 :(得分:14)
只需重新发布answer by oleynikd,因为它简单明了
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
android.R.anim.fade_in, android.R.anim.fade_out).toBundle();
startActivity(intent, bundle);
答案 3 :(得分:7)
您也可以在 style.xml 文件中使用此代码,这样您就无需在 activity.java中编写任何其他内容
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowAnimationStyle">@style/AppTheme.WindowTransition</item>
</style>
<!-- Setting window animation -->
<style name="AppTheme.WindowTransition">
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
答案 4 :(得分:0)
在setContentView之后放置以下行:
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
它将为您的活动添加淡入和淡出动画。动画已由android系统提供,因此无需重新创建。
希望它会对您有所帮助:)