【问题标题】:Activity Transition sliding in/out animationActivity Transition 滑入/滑出动画
【发布时间】:2013-11-04 23:19:24
【问题描述】:

我知道这是互联网上的一些示例,在 Stackoverflow 上我也发现了很多示例,但信不信由你,它们都没有满足我的需求。 Even I have asked a similar question few time ago 我又陷入了这个问题。基本上是同一个问题,但方向相反。我可以用Activity B 做任何我想做的动画,但这里的问题是Activity A,我可以在少数情况下制作动画。基本上ActivityAenter_left只有这个组合:

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

我想要做的是在startActivity()onBackPressed() 上仅对Activity A 进行动画(移动),而Activity B 在屏幕上保持不动。 Activity A 将始终绘制在顶部(作为滑动菜单,我可以使用 Activity B 来做到这一点)。 我真的认为上面的 sn-p 会完成工作:

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 个必要的动画:

从左输入

<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 重叠。

【问题讨论】:

    标签: android animation android-activity android-xml


    【解决方案1】:

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

    startActivityForResult(intent, 500);
    overridePendingTransition(R.anim.enter_from_left, R.anim.stay_still);
    

    【讨论】:

    • 这使得Activity B 从左侧进入,而Activity A 保持不变。第一个参数是进入(新创建的)活动的动画。
    【解决方案2】:

    我发现下一个对片段 fragmentTransaction.setCustomAnimations(R.anim.stay_still,R.anim.exit_on_left); 非常有效
    overridePendingTransition(R.anim.stay_still, R.anim.exit_on_left); 不适用于活动。

    反之,

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

    不适用于活动,也不适用于片段。最有效的方法是 transaction.setCustomAnimations(R.anim.stay_still,R.anim.exit_on_left, R.anim.enter_from_left,R.anim.exit_on_right);

    如果有人有任何其他解决方案,我仍在等待,我们将不胜感激。

    【讨论】:

      【解决方案3】:

      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>
      

      【讨论】:

        【解决方案4】:

        试试这个

        1. 在 Intent 调用中添加活动转换进/出动画

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

          slide_in.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"/>
          

          slide_out.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" />
          

        谢谢

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

          • 不,我不想要这个,因为我有一些活动必须分享这个动画。这不应该是一个滑动菜单。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-28
          • 1970-01-01
          • 1970-01-01
          • 2016-04-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多