overridePendingTransition无法正常工作

时间:2013-12-23 13:59:49

标签: android android-intent transitions

我正在尝试在我的应用中实现转换,但overridePendingTransition(anim,anim)无法正常工作。

  • 我启用了窗口转换
  • 调试代码后,我可以说编译器确实执行了调用但是没有显示
  • 我试过在overridePendingTransition()之前调用finish()这似乎没有任何影响

我的代码简单而标准:

启动intent并调用overridePendingTransition:

Intent newsIntent = new Intent(ZPFActivity.this, More2013Activity.class);
startActivity(newsIntent);
overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
finish();

开始动画不应该做任何事情,只有淡入淡出动画应该有效。

slide_no_move XML:

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

淡出XML:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
 android:fillAfter="true">
 <alpha android:fromAlpha="1.0" 
        android:toAlpha="0.0"
        android:duration="500"/>
</set>

编辑:我忘了提到我开始的活动扩展“主要”活动。这可能导致问题吗?

10 个答案:

答案 0 :(得分:26)

尝试在调用finish()后调用pendingTransition,如下所示:

Intent newsIntent = new Intent(ZPFActivity.this, More2013Activity.class);
startActivity(newsIntent);
finish();
overridePendingTransition(R.anim.slide_no_move, R.anim.fade);

答案 1 :(得分:22)

如果激活USB调试模式,它可以禁用转换效果。 输入开发人员选项(激活调试模式的位置),找到用户的界面部分,检查动画的过渡比例是否禁用了动画。如果是这样,请将其设置为.5x。完成!

答案 2 :(得分:13)

尝试使用:

    public class More2013Activity extends Activity{
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          overridePendingTransition(R.anim. slide_no_move, R.anim.fade_in);
          setContentView(R.layout.more_activity)
      }
    }

而不是你的代码。

答案 3 :(得分:10)

如果您使用的是Android版&gt; = 21,请在 style.xml 文件中将 android:windowActivityTransitions 属性设为 true values-v21 文件夹如下。

   <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

       <item name="android:windowActivityTransitions">true</item>

   </style>

答案 4 :(得分:6)

进入您的设备开发者选项,还有三个选项窗口动画比例,过渡动画比例和动画持续时间比例。确保所有都没有关闭。这是我遇到的原因之一。

答案 5 :(得分:5)

6.0从使用此方法覆盖自定义动画

ActivityOptions options = ActivityOptions.makeCustomAnimation(context,R.anim.slide_from_right, R.anim.slide_to_left);
Intent intent = new Intent(context, WhichActivityToOpen.class);
context.startActivity(intent, options.toBundle());

答案 6 :(得分:4)

我知道这是一个老帖子,但我看到了它,并感到有义务回答它:

这是一个非常模糊的问题,它与设备有关。我当时正在使用iOcean X7。后来我发现这部手机无法播放动画。对于一些人来说,它没有在任何应用程序上播放动画。

答案 7 :(得分:1)

也可能在 onPause()方法中使用 overridePendingTransition(anim,anim)。 我有同样的问题,但我通过一个小技巧解决它。

1:在 onCreate()方法

之前在类中定义布尔值
private boolean trans=true;

@Override
protected void onCreate(Bundle savedInstanceState) {...

2:使用startActivity

时输入 trans = false;
Intent newsIntent = newIntent(ZPFActivity.this,More2013Activity.class);         
 trans = false;        
 startActivity(newsIntent);        
 overridePendingTransition(R.anim.slide_no_move, R.anim.fade);

3:在 onPause()方法中执行此操作

@Override
protected void onPause() {
    if (trans) {
        overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
    }
    super.onPause();
}

4:在 onResume()方法中执行此操作

@Override
protected void onResume() {
    super.onResume();
    trans=true;
}

答案 8 :(得分:0)

请检查您的设备是否处于省电模式。在省电模式下动画不起作用。

答案 9 :(得分:0)

对我来说,挑战不在于执行,而在于适当的概念化。

overridePendingTransition方法接受 enter 动画和 exit 动画。

正确地概念化这些技巧的诀窍是 enter exit 具有不同的含义,具体取决于我们称之为overridePendingTransition的位置:

  • onResume进行调用时,正在进入当前活动,并且正在退出上一个活动(无论该活动是什么)。
  • startActivity之后立即被调用时,下一个活动(正在启动)正在进入,当前活动正在退出。
  • finish进行调用时,下一个活动(无论结束时是什么)正在进入,当前活动正在退出。

一旦我理解了这些相当奇怪的进入/退出规则,我就能完成从任何地方到任何地方的正确过渡。

希望这会有所帮助。