欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

华为手机设置Activity进出动画无效,及进出动画使用

程序员文章站 2022-05-03 10:54:27
...

先说说我的经历:

    本来这个Activity进出动画是个很简单的东西,我就在anim创建了translate_in.xml和translate_out.xml两个动画文件,style.xml中设置了以下代码:

translate_in.xml中:

从下到上,300毫秒;

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromYDelta="100%p"
        android:toYDelta="0%p" />
</set>

translate_out.xml中:

从下到上,300毫秒;

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromYDelta="0%p"
        android:toYDelta="100%p" />
</set>

style.xml中:

<!--ActivityTheme-->
<style name="ActivityInOutTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!--不设置窗口透明,进入动画会现有个黑屏的过程-->
    <item name="android:windowIsTranslucent">true</item>
    <!--设置窗口的动画样式-->
    <item name="android:windowAnimationStyle">@style/InOutAnim</item>
</style>
<style name="InOutAnim" parent="@android:style/Animation.Activity">
    <!--打开时新Activity动画方式-->
    <item name="android:activityOpenEnterAnimation">@anim/tranlate_in</item>    
    <!--打开时旧Activity动画方式-->
    <item name="android:activityOpenExitAnimation">@anim/tranlate_out</item>
    <!--关闭时新Activity动画方式-->
    <item name="android:activityCloseEnterAnimation">@anim/tranlate_in</item>
    <!--关闭时旧Activity动画方式-->
    <item name="android:activityCloseExitAnimation">@anim/tranlateout</item>
</style>

AndroidManifest.xml中:

<activity
    android:name=".TranslateActivity"
    android:theme="@style/ActivityInOutTheme" />

案例来说这样就结束了,在华为手机上运行,没有任何效果,一脸懵,找寻无果后,换了小米,三星手机,

出现了另一个问题:有进入动画,没有退出动画;

就目前而言,很多厂商都默认了Activity的动画是从右向左进入,从左向右退出,所以覆盖了咱们设置的动画,索性就直接使用硬代码设置,以下是解决方案;

解决方案:

在Activity.class中通过硬代码设置动画:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 设置进入动画
    overridePendingTransition(R.anim.translate_in, R.anim.translate_out);
}

// 重新finish方法
@Override
public void finish() {
   super.finish();
   // 设置退出动画
   overridePendingTransition(R.anim.translate_in, R.anim.translate_out);
}

当然也是需要将主题设置成透明,否则动画执行前会有黑屏的情况!到此为止,就可以了