5

我知道这是互联网上的一些例子,在Stackoverflow上我也发现了很多例子,但信不信由你,它们都没有满足我的需求。即使我前几次问过类似的问题,我也再次陷入了这个问题。基本上是同一个问题,但方向相反。我可以做任何我想做的动画,Activity B但这里的问题是Activity A我只能在少数情况下制作动画。基本上只ActivityAenter_left这个组合:

overridePendingTransition(R.anim.enter_from_right, R.anim.exit_on_left);

我想要做的是动画(移动)只是在屏幕上保持Activity A不动startActivity()。将始终绘制在顶部(作为滑动菜单,我可以使用 来做到这一点)。我真的认为上面的代码片段可以完成工作:onBackPressed()Activity BActivity AActivity B

Intent intent = new Intent(ActivityA.this, ActivityB.class);
                startActivityForResult(intent, 500);
                overridePendingTransition(R.anim.stay_still, R.anim.exit_on_left);

但这甚至不播放任何动画,而

//this is the animation for onBackPressed()
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        overridePendingTransition(R.anim.enter_from_left, 0);
    }

随心所欲地制作动画Activity A,但Activity B突然从屏幕上消失,我想留下来(设置(R.anim.enter_from_left, R.anim.stay_still)什么都不做)。

我准备了所有 5 个必要的动画:

enter_from_left

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >

<translate
    android:duration="500"
    android:fromXDelta="-100%"
    android:toXDelta="0%" />
</set>

exit_on_left

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >

<translate
    android:duration="500"
    android:fromXDelta="0%"
    android:toXDelta="-100%" />
</set>

enter_from_right

    <set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="500"
        android:fromXDelta="100%"
        android:toXDelta="0%" />
   </set>

exit_on_right

    <set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="500"
        android:fromXDelta="0%"
        android:toXDelta="100%" />
   </set>

保持静止

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="500"
        android:fromXDelta="0%"
        android:toXDelta="0%" />
</set>

我尝试了很多组合,但没有一个有效。你能告诉我这个动画是否可能,是否可以以这种方式完成?我将发布一张图片,以更清楚地说明我想要做什么:

所以,第一步:打开startActivity()ActivityA应该从左侧离开屏幕,在移动时,Activity B应该已经“在那儿”,“在它下面”。

在此处输入图像描述

然后,onBackPressed() Acyivity B应该“回来”,从屏幕左侧进入并重叠ActivityB保持不动。

在此处输入图像描述

4

5 回答 5

0

I could find that the next one works very nice with fragments fragmentTransaction.setCustomAnimations(R.anim.stay_still,R.anim.exit_on_left);
while overridePendingTransition(R.anim.stay_still, R.anim.exit_on_left); does not work with activity.

On the other hand the reverse,

overridePendingTransition(R.anim.enter_from_left, 0); or fragmentTransaction.setCustomAnimations(R.anim.enter_from_left, 0);

does not work with activity neither with fragments. The most close approach that works was transaction.setCustomAnimations(R.anim.stay_still,R.anim.exit_on_left, R.anim.enter_from_left,R.anim.exit_on_right);

If anyone has any other solution, I'm still waiting to hear it and it will be appreciated.

于 2013-11-07T14:58:09.363 回答
0

不确定您是否尝试过这种组合,但应该可以。-

startActivityForResult(intent, 500);
overridePendingTransition(R.anim.enter_from_left, R.anim.stay_still);
于 2013-11-04T23:30:46.160 回答
0

尝试这个

  1. 在意图调用中为活动转换输入/输出添加动画,例如

    startActivity(new Intent(this,toActivity));
    overridePendingTransition( R.anim.slide_in, R.anim.slide_out);
    
  2. 这是动画文件,将其添加到 anim 文件夹中

    幻灯片输入.xml

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

    幻灯片输出.xml

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

谢谢

于 2020-03-27T05:41:29.863 回答
0

5年后,但有一个解决方案。这两个功能需要在将覆盖默认转换的活动中实现。

@Override
public void startActivity(Intent intent) {
    super.startActivity(intent);
    overridePendingTransition(R.anim.from_right_in, R.anim.from_left_out);
}

@Override
public void startActivityForResult(Intent intent, int requestCode) {
    super.startActivityForResult(intent, requestCode);
    overridePendingTransition(R.anim.from_right_in, R.anim.from_left_out);
}

from_right_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p" android:toXDelta="0" android:interpolator="@android:interpolator/accelerate_decelerate" android:duration="300"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

from_left_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="300"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>
于 2018-10-16T21:21:54.813 回答
-1

我不知道我是否真的明白你想要什么,但如果你想创建一个滑动菜单,你可以使用本教程来实现它,它工作得很好 - 这是解决你的问题的替代方法 -:

http://developer.android.com/training/implementing-navigation/nav-drawer.html

但是您必须使用FragmentActivity而不是Activity. 如果您想要一个示例,请索取它,我会发布它。祝你好运。

于 2013-11-05T03:16:38.187 回答