Android activity动画不生效原因及解决方案总结

 更新时间:2021年11月03日 09:27:31   作者:许佳佳233  
android activity动画是一个比较简单的功能。但是使用时总会由于各种小问题导致动画失效,笔者根据自己经验,整理了各种可能导致的原因,期望能对你有所帮助

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);

到此这篇关于Android activity动画不生效原因及解决方案总结的文章就介绍到这了,更多相关Android activity动画内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android用户注册界面简单设计

    Android用户注册界面简单设计

    这篇文章主要为大家分享了Android用户注册界面简单设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 手机方向传感器的缺点及解决方法探究

    手机方向传感器的缺点及解决方法探究

    今天小编就为大家分享一篇关于手机方向传感器的缺点及解决方法探究,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Android仿QQ聊天撒花特效 很真实

    Android仿QQ聊天撒花特效 很真实

    本文写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android中PackageManager使用详解

    Android中PackageManager使用详解

    PackageManger的主要职责是管理应用程序包,通过它可以获取应用程序信息,这篇文章主要给大家介绍了关于Android中PackageManager使用的相关资料,需要的朋友可以参考下
    2021-11-11
  • 源码剖析Android中Okio的使用

    源码剖析Android中Okio的使用

    这篇文章主要将从源码出发,带大家剖析一下Android中Okio的具体使用,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-02-02
  • Android 改变图标原有颜色和搜索框的实例代码

    Android 改变图标原有颜色和搜索框的实例代码

    让Android也能有iOS那么方便的图片色调转换,就像同一个图标,但是有多个地方使用,并且颜色不一样,就可以用这个方法了。 本文实现TextView图片和文字居中,键盘搜索功能,具体实现代码大家跟随脚本之家小编看看吧
    2017-09-09
  • Android获取经纬度计算距离介绍

    Android获取经纬度计算距离介绍

    Android提供LocationManager和Location,可以方便的获得经纬度、海拔等位置。使用LocationManager来获得位置管理类,从而可以获得历史GPS信息以及位置变化的监听注册;使用Location来获得具体的位置信息
    2014-01-01
  • Android应用中使用DOM方式解析XML格式数据的基本方法

    Android应用中使用DOM方式解析XML格式数据的基本方法

    这篇文章主要介绍了Android应用中使用DOM方式解析XML格式数据的基本方法,值得注意的是DOM方式解析的效率并不高,在数据量大的时候并不推荐使用,需要的朋友可以参考下
    2016-04-04
  • Android拍照保存在系统相册不显示的问题解决方法

    Android拍照保存在系统相册不显示的问题解决方法

    我们保存相册到Android手机的时候,然后去打开系统图库找不到我们想要的那张图片,那是因为我们插入的图片还没有更新的缘故,下面与大家分享下此问题的解决方法
    2013-06-06
  • Android路由框架Router分析详解

    Android路由框架Router分析详解

    本篇文章主要介绍了Android路由框架Router分析详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论