Android activity动画不生效原因及解决方案总结
作者:许佳佳233 发布时间:2022-12-18 16:31:41
activity动画方式
在AndroidMenifest中添加activity的动画属性windowAnimationStyle
<item name="android:windowAnimationStyle">@style/anim_fade</item>
在activity代码中添加 overridePendingTransition
overridePendingTransition(int enterAnim,int exitAnim)
问题汇总
一、动画写的有问题
二、activity theme中设置动画为null,或者parent theme设置动画为null
三、overridePendingTransition 使用时机问题
四、overridePendingTransition 写错地方
五、onPause与onResume中的overridePendingTransition会覆盖其他位置
六、透明度影响动画
七、插件化问题导致找不到动画
一、动画写的有问题
动画本身出问题的方式无法一一列举,常见的有“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" />
二、activity theme中设置动画为null,或者parent theme设置动画为null
如下:
<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 使用时机问题
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 之后
在finish之后
如下:
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);
四、overridePendingTransition 写错地方
写错地方就纯属是开发者的粗心,例子如下:
重写了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会覆盖其他位置
根据笔者经验,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);
来源:https://blog.csdn.net/Double2hao/article/details/121060423


猜你喜欢
- 本文实例为大家分享了Android实现录音静音降噪的具体代码,供大家参考,具体内容如下需求:客户反馈产品的录音里面很多杂音(因为我们把Cod
- 使用Kotlin的Lambda表达式,我们可以抛弃回调接口的使用。只需设置希望后面会被调用的函数即可。示例如下新建一个Kotlin类clas
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 1.之前在使用AutoMapper 框架感觉用着比较不够灵活,而且主要通过表达式树Api 实现对象映射 ,写着比较讨厌,当出现复杂类型和嵌套
- 前言之前看到某公司的官网的文章的浏览量刷新一次网页就会增加一次,给人的感觉不太好,一个公司的官网给人如此直白的漏洞,我批量发起请求的时候发现
- 1. 配置MailPlugin插件public void configPlugin(PluginLoader pluginLoader) {
- 01 高效设置我们先来讲讲有哪些设置调整之后 IDEA 会更好用。先说明一点:这里只是根据我个人喜好和习惯的建议,IDEA 的默认配置已经很
- SpringBoot多线程进行异步请求的处理近期在协会博客园中,有人发布了博客,系统进行查重的时候由于机器最低配置进行大量计算时需要十秒左右
- 本文实例讲述了Android开发实现圆形图片功能。分享给大家供大家参考,具体如下:**绝对布局:通过直接给定控件起始坐标 ( x , y )
- Step 1.依赖bannerGradledependencies{ compile 'com.youth.banner
- JWT本文代码截取自实际项目。jwt(Json Web Token),一个token,令牌。简单流程:用户登录成功后,后端返回一个token
- 本次和大家分享的是怎么来消费服务,上篇文章讲了使用Feign来消费,本篇来使用rest+ribbon消费服务,并且通过轮询方式来自定义了个简
- 本文实例讲述了C#操作session的类。分享给大家供大家参考。具体分析如下:这个C#类对session操作进行了再次封装,可以大大简化se
- //把txt清空 &n
- Java线程池的几种实现方法和区别介绍import java.text.DateFormat;import java.text.Simple
- 1. System.Char 字符char 是 System.Char 的别名。System.Char 占两个字节,16个二进制位。Syst
- 学了Android有一段时间了,一直没有时间写博客,趁着周末有点空,就把自己做的一些东西写下来. 一方面锻炼一下自己的写文档的能力,另一方面
- 数组array和集合的区别:(1) 数值是大小固定的,同一数组只能存放一样的数据。(2) java集合可以存放不固定的一组数据(3) 若程序
- 本文实例讲述了Android控件Tween动画(补间动画)实现方法。分享给大家供大家参考,具体如下:Android动画中的Tween动画:是
- 一、概述log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控