Activity之间的动画,其中一个是singleTask

Animation between Activities, of which one is singleTask

我正在开发一个聊天应用程序,但在弄清楚如何让两个活动之间的过渡正确设置动画时遇到了问题。我已经用谷歌搜索了一段时间,也搜索过它,但如果这个问题已经得到回答,请提前道歉。

我有一个 ChatMainActivity,它包含一个包含聊天列表的 Fragment 和一个 ChatContentFragmentActivity,它包含一个包含聊天消息的 Fragment。如下所示,我在 AndroidManifest.xml.

中将 ChatMainActivity 声明为 launchMode="singleTask"
  <activity
        android:name=".ui.activities.ChatMainActivity"
        android:launchMode="singleTask"
        android:theme="@style/AppTheme"
        android:windowSoftInputMode="adjustResize" />
  <activity
        android:name=".ui.activities.ChatContentFragmentActivity"
        android:parentActivityName=".ui.activities.ChatMainActivity"
        android:theme="@style/AppTheme"
        android:windowSoftInputMode="adjustResize" />

这些是我的动画 .xml:

chat_content_activity_enter_animation.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@integer/activity_animation_duration"
        android:fromXDelta="100%"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="0" />
</set>

chat_content_activity_exit_animation.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@integer/activity_animation_duration"
        android:fromXDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="100%" />
</set>

chat_list_activity_enter_animation.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@integer/activity_animation_duration"
        android:fromXDelta="-100%"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="0" />
</set>

chat_list_activity_exit_animation.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@integer/activity_animation_duration"
        android:fromXDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="-100%" />
</set>

下面是我如何使用它们:

RecyclerViewAdapter 中包含 ChatMainActivity

中的聊天记录
Intent intent = new Intent(context, ChatContentFragmentActivity.class);
context.startActivity(intent);
activity.overridePendingTransition(R.anim.chat_content_activity_enter_animation, R.anim.chat_list_activity_exit_animation);

ChatContentFragmentActivity

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.chat_content_activity_exit_animation, R.anim.chat_list_activity_enter_animation);
}

我现在的问题是显示了 ChatContentFragmentActivity 的进入和退出动画,但 ChatMainActivity 什么也没做。

有一个我现在似乎找不到的 SO 问题,它表明 singleTask 在这里是个问题,但我记得那个问题中建议的解决方案对我没有帮助。

有谁知道如何让 ChatMainActivity 的退出和进入动画播放?

编辑:这是目前的样子:

使用这个 .

pull_right.xml

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

push_left.xml

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

fade_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="0.0" />
</set>

在适配器中使用这个........

Intent intent = new Intent(context, ChatContentFragmentActivity.class);
context.startActivity(intent);
activity.overridePendingTransition(R.anim.pull_right, R.anim.push_left);

在 ChatContentFragmentActivity Class onBackPressed() 方法中使用它......

@Override
    public void onBackPressed() {
        super.onBackPressed();
        overridePendingTransition( R.anim.fade_out,0);
    }

对于键盘,只需将这些行添加到您的 xml 文件中的 EditText ChatContentFragmentActivity 标签中....

android:focusable="true"
android:focusableInTouchMode="true"

享受编码.........