我正在尝试实现活动转换,但我无法看到效果。这是我第一次活动的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_architecture);
setUpWindowAnimations();
}
private void setUpWindowAnimations() {
if (android.os.Build.VERSION.SDK_INT >= 21) {
Log.i("ANIM", "Fade called");
Fade fade = new Fade(2);
fade.setDuration(3000);
getWindow().setExitTransition(fade);
}
}
以下是第二项活动的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);
setUpWindowAnimations();
}
private void setUpWindowAnimations() {
if (android.os.Build.VERSION.SDK_INT >= 21) {
Log.i("ANIM", "slide called");
Slide slide = new Slide(Gravity.LEFT);
slide.setDuration(3000);
getWindow().setEnterTransition(slide);
}
}
即使我设置淡出动画,也没有淡入淡出,幻灯片也默认工作,即方向是BOTTOM而不是LEFT。
Here是我的values/style.xml
而here是我的v21/styles.xml
。
这是我的AndroidManifest.xml
:
<application
android:name=".MyApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/AppTheme">
为什么这些过渡不起作用以及如何使它们起作用。我使用paste.ubuntu.com因为SO编辑器没有正确显示xml。
答案 0 :(得分:39)
Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this).toBundle();
this.startActivity(intent,bundle);
在两个活动之间设置意图后添加这两行, 这将有效。
您不能只通过startActivity(intent)
方法开展活动,
您需要使用包指定跨活动的转换。
答案 1 :(得分:2)
在setUpWindowAnimations();
之前声明setContentView
。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setUpWindowAnimations();
setContentView(R.layout.activity_architecture);
}
private void setUpWindowAnimations() {
if (android.os.Build.VERSION.SDK_INT >= 21) {
Log.i("ANIM", "Fade called");
Fade fade = new Fade(2);
fade.setDuration(3000);
getWindow().setExitTransition(fade);
}
}
其他解决方案
制作一个xmlTransition
并将此xml代码放在那里
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:interpolator="@android:interpolator/accelerate_decelerate">
<fade android:fadingMode="fade_out"/>
<slide android:slideEdge="bottom"/>
</transitionSet>
这应该是Api21
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowTransitionBackgroundFadeDuration">1000</item>
</style>
</resources>
然后在setCreateView
if (Build.VERSION.SDK_INT >= 21) {
TransitionInflater inflater = TransitionInflater.from(this);
Transition transition = inflater.inflateTransition(R.transition.transition_a);
getWindow().setExitTransition(transition);
}
这应该在setCreateView
if(Build.VERSION.SDK_INT >= 21){
Slide slide = new Slide();
slide.setDuration(1000);
getWindow().setEnterTransition(slide);
}