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,activity,动画
0
投稿

猜你喜欢

  • C#中Hashtable和Dictionary的区别与用法示例

    2023-10-05 03:22:59
  • SpringSecurity rememberme功能实现过程解析

    2021-12-20 05:22:08
  • java基于netty NIO的简单聊天室的实现

    2023-11-18 15:29:43
  • 关于Java中finalize析构方法的作用详解

    2023-12-09 23:46:27
  • WPF中鼠标/键盘/拖拽事件以及用行为封装事件详解

    2021-05-24 00:22:38
  • Android使用Canvas对象实现刮刮乐效果

    2021-11-27 02:53:36
  • Android线程实现图片轮播

    2021-06-02 17:49:23
  • Android仿正点闹钟时间齿轮滑动效果

    2022-09-06 09:27:46
  • Java 将List中的实体类按照某个字段进行分组并存放至Map中操作

    2022-09-13 20:25:35
  • C#常见算法面试题小结

    2023-05-18 02:56:07
  • Android Drawable及其相关类的使用

    2023-10-18 09:32:38
  • 浅谈Android面向切面编程(AOP)

    2022-04-03 15:14:41
  • Java二维数组实现数字拼图效果

    2021-11-21 20:39:17
  • java8中:: 用法示例(JDK8双冒号用法)

    2023-11-25 06:21:21
  • SpringBoot中@Import注解如何正确使用

    2023-07-28 12:36:16
  • c# 爬取优酷电影信息(1)

    2022-04-23 13:34:59
  • 一文带你搞懂Java中Get和Post的使用

    2023-04-16 23:57:24
  • Java虚拟机栈jvm栈的作用

    2023-11-10 13:52:15
  • Java实现List集合转树形结构的示例详解

    2021-11-11 10:48:33
  • Unity使用摄像机实现望远镜效果

    2021-06-07 23:30:26
  • asp之家 软件编程 m.aspxhome.com