gpt4 book ai didi

android - 使用 FLAG_ACTIVITY_CLEAR_TOP 时是否无法实现过渡动画?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:53 38 4
gpt4 key购买 nike

我有一个 MainActivity(它有 launchMode=singleTop),我从它转到其他 Activity ,例如 BC。现在,我想在 BC 中单击某个按钮时导航回 MainActivity。而且我还想要过渡动画。

这是代码

代码 1

Intent intent=new Intent(this,MainActivity.class);
Bundle animation= ActivityOptions.makeCustomAnimation(getApplicationContext(), R.animator.translate_left_to_right, R.animator.translate_source_left_to_right).toBundle();
startActivity(intent,animation);
finish();

上面的代码工作正常,除了 MainActivity 的新实例是在旧实例之上创建的!我不希望发生这种情况。所以,经过一些研究,我尝试了下面的代码


代码 2

Intent intent=new Intent(this,ListingActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Bundle animation= ActivityOptions.makeCustomAnimation(getApplicationContext(), R.animator.translate_left_to_right, R.animator.translate_source_left_to_right).toBundle();
startActivity(intent,animation);
finish();

这段代码似乎消除了创建 Activity 的新实例的问题,因为标志 FLAG_ACTIVITY_CLEAR_TOP 处理了它。但是,现在过渡动画似乎不起作用!
标记 FLAG_ACTIVITY_CLEAR_TOP 是否不允许任何动画?我的问题的解决方案是什么?我既需要动画转换,也需要不创建 MainActivity 的新实例。


编辑
这似乎可以解决 David Wasser 所建议的问题。

 Intent intent=new Intent(this,ListingActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
overridePendingTransition(R.animator.translate_left_to_right,R.animator.translate_source_left_to_right);

但是动画并不流畅。动画中有一个小故障。我认为这是因为 Activity (B 或 C)在动画完成之前被销毁了。我不确定

发布动画文件

translate_left_to_right.xml

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


translate_right_to_left.xml

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


translate_source_left_to_right.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0%p"
android:toXDelta="50%p"
android:duration="400"/>


translate_source_right_to_left.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="-50%p"
android:duration="400"/>

最佳答案

我经常玩这个。我终于能够重现你的问题。我缺少 MainActivitylaunchMode="singleTop",这就是我之前没有看到该行为的原因。对此感到抱歉。

如果我将 launchMode="singleTop" 添加到 list 中的 MainActivity,那么我可以使用代码 2 重现该行为。

使用我建议的代码,我能够解决问题:

    Intent intent=new Intent(this,ListingActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
overridePendingTransition(R.animator.translate_left_to_right,
R.animator.translate_source_left_to_right);

但是,我还需要将动画资源文件 translate_source_left_to_right.xml 更改为:

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

这就是导致动画出现“故障”的原因。在同一时间段内,传入 Activity 的动画效果从 -100% 变为 0%,传出 Activity 的动画效果从 0% 变为 50%。因此传出 Activity 移动了屏幕宽度的一半,然后停止。我更改了传出动画,使其从 0% 变为 100%,现在您可以看到两个 View 都在整个宽度上进行动画处理(我认为这就是您想要的)。

感谢挑战:-)

关于android - 使用 FLAG_ACTIVITY_CLEAR_TOP 时是否无法实现过渡动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28176141/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com