activity动画方式 在AndroidMenifest中添加activity的动画属性windowAnimationStyle <item name="android
在AndroidMenifest中添加activity的动画属性windowAnimationStyle
<item name="android:windowAnimationStyle">@style/anim_fade</item>
在activity代码中添加 overridePendingTransition
overridePendingTransition(int enterAnim,int exitAnim)
动画本身出问题的方式无法一一列举,常见的有“duration设置为0”,“from与to的值设置相同”。
<alpha xmlns:android="Http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="0.0"
android:duration="300" />
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="0" />
如下:
<style name="TestActivityTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@null</item>
</style>
<style name="TestActivityTheme" parent="ParentActivityTheme">
</style>
<style name="ParentActivityTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@null</item>
</style>
overridePendingTransition 源码注释如下:
Call immediately after one of the flavors of startActivity(Intent) or finish to specify an explicit transition animation to perfORM next.
As of Build.VERSION_CODES.JELLY_BEAN an alternative to using this with starting activities is to supply the desired animation information through a ActivityOptions bundle to startActivity(Intent, Bundle) or a related function. This allows you to specify a custom animation even when starting an activity from outside the context of the current top activity.
Params:
enterAnim – A resource ID of the animation resource to use for the incoming activity. Use 0 for no animation.
exitAnim – A resource ID of the animation resource to use for the outGoing activity. Use 0 for no animation.
其中说了两个overridePendingTransition 的使用时机:
如下:
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
finish();
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
写错地方就纯属是开发者的粗心,例子如下:
重写了finish方法,但是调用的是finishAndRemoveTask
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
finishAndRemoveTask();
}
@Override
public void finish() {
super.finish();
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
根据笔者经验,onPause和onResume中如果写了overridePendingTransition,那么其效果会覆盖其他地方设置的动画。
比如你在finish的时候设置了overridePendingTransition,然后在onPause中也设置了overridePendingTransition,那么最终效果会以onPause中的。
比如下面的例子中,finish之后设置了动画,onPause中关闭了activity的动画,那么最终就是没有动画。
@Override
protected void onPause() {
super.onPause();
overridePendingTransition(0,0)
}
@Override
public void finish() {
super.finish();
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
比如页面本身就是透明的情况下,还设置透明度动画,那么就会看上去无效。
如果动画资源找不到,都会引起动画失效的问题。
插件化的场景中,比较特殊的地方是:
有些插件化框架加载动画资源,需要使用其框架对应的api来操作。
原因是:插件化框架一般都会更改资源的id,通过固定的API才能够找到对应的资源。
在部分插件化框架中,如果直接调用overridePendingTransition来加载动画,会无法找到动画资源,并且Android Studio也不会报错。
比如下面代码,直接在插件中调用就可能会找不到资源,并且Android Studio也不会报错。
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
到此这篇关于Android activity动画不生效原因及解决方案总结的文章就介绍到这了,更多相关Android activity动画内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Android activity动画不生效原因及解决方案总结
本文链接: https://www.lsjlt.com/news/156254.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0