我正在尝试在我的应用中实现转换,但overridePendingTransition(anim,anim)无法正常工作。
我的代码简单而标准:
启动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>
编辑:我忘了提到我开始的活动扩展“主要”活动。这可能导致问题吗?
答案 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
进行调用时,下一个活动(无论结束时是什么)正在进入,当前活动正在退出。一旦我理解了这些相当奇怪的进入/退出规则,我就能完成从任何地方到任何地方的正确过渡。
希望这会有所帮助。