在一个singleTask的Activity之间进行动画切换

3
我正在开发一个聊天应用程序,发现在如何正确地对两个活动之间的过渡进行动画处理方面存在问题。我已经在谷歌上搜索了一段时间,并且也在SO上进行了搜索,但如果此问题已经有答案,请提前道歉。
我有一个 ChatMainActivity,它包含一个显示聊天列表的片段,以及一个 ChatContentFragmentActivity,它包含聊天消息的片段。如下所示,我在 AndroidManifest.xml 中将 ChatMainActivity 声明为 "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>

以下是我使用它们的方法:

ChatMainActivity中包含聊天记录的RecyclerViewAdapter中使用它们。

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的退出和进入动画播放吗?
编辑:目前的情况如下:Animation at the moment

@sushildlh,请查看我的编辑,其中包含一个 .gif 动画,展示了目前它的错误工作方式。 - HePa
使用此链接 http://www.christianpeeters.com/android-tutorials/tutorial-activity-slide-animation/#more-483 来提高您的知识,享受编码的乐趣。 - sushildlh
我尝试了教程里的方法,但不幸的是没有帮助,结果与 .gif 中看到的相同。 - HePa
1个回答

0

使用这个。

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类中使用onBackPressed()方法......

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

对于键盘,只需在ChatContentFragmentActivity的EditText标签中添加以下行到您的xml文件中即可....

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

享受编程……


虽然我现在已经成功解决了问题,但这也是一个可行的解决方案,所以我会接受你的答案。 - HePa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接