Android过渡动画不起作用
Posted
技术标签:
【中文标题】Android过渡动画不起作用【英文标题】:Android transition animation is not working 【发布时间】:2015-05-28 11:19:25 【问题描述】:爆炸和滑动的android过渡是相同的。实际上我不认为它的动画。持续时间也不是 6 秒。我该如何解决?
代码取自here。
public class MainActivity extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Transition ts = new Slide(); //Slide(); //Explode();
ts.setDuration(6000);
getWindow().setEnterTransition( ts );
getWindow().setExitTransition( ts );
setContentView(R.layout.activity_main_activity);
@Override
public void onBackPressed()
super.onBackPressed();
finishAfterTransition();
样式-v21.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="BaseAppTheme" parent="android:Theme.Material.Light">
<item name="android:colorControlHighlight">#0000AA</item>
<item name="android:navigationBarColor">#0000AA</item>
<item name="android:colorPrimaryDark">#0000AA</item>
<item name="android:colorPrimary">#0000FF</item>
<item name="android:colorAccent">#00FF00</item>
<item name="android:windowBackground">@android:color/black</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<!-- specify enter and exit transitions -->
<item name="android:windowEnterTransition">@transition/explode</item>
<item name="android:windowExitTransition">@transition/explode</item>
</style>
</resources>
【问题讨论】:
我也有这个问题!即使接受的答案解决了问题,我也想知道您的代码为什么不起作用。 这个问题解决了吗?我也有类似的问题。 【参考方案1】:在我自己的情况下,由于某种原因,我的 Android 设备的开发者选项中的过渡动画已关闭。
只需转到设置 -> 开发人员选项 -> 过渡动画 scale:设置为动画比例1x
【讨论】:
谁给这家伙奖牌和甜甜圈!!【参考方案2】:你可以用它来开始一个新的活动与过渡
startActivity(new Intent(this, NewActivity.class));
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
创建文件 res/anim/slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="1000" android:fromXDelta="100%" android:toXDelta="0%" />
<alpha android:duration="1000" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>
创建文件 res/anim/slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="2000" android:fromXDelta="0%" android:toXDelta="-100%"/>
<alpha android:duration="2000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>
【讨论】:
那么setExitTransition(ts)
是做什么的,如果您在更改活动时仍需要显式引用xml 文件?我一直在关注this,它似乎说您可以仅在 Java 中设置转换。我是不是误会了?
这是一个糟糕的答案,不使用较新的转换 API(问题中使用的 API 和用于所有未来活动转换的下一代 API)。
这不是给定问题的答案
@Brian 你有使用Transitions API 的例子吗?我尝试关注此developer.android.com/training/transitions/start-activity,但无法正常工作。【参考方案3】:
我发现我真的需要去做
ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, test, "transition_name");
ActivityCompat.startActivity(TourAndLoginActivity.this, new Intent(TourAndLoginActivity.this, LoginActivity.class), activityOptionsCompat.toBundle());
仍然令人费解,但我不知道为什么我们需要一个共享对象来获得进入/退出转换。如果我提供null
而不是ActivityOptionsCompat
,则没有过渡
【讨论】:
当您处于活动或片段中时,您为测试视图传递了什么? @Sniper 我错过了一个没有转换视图的构建器,我在另一个问题中被指出:ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(TourAndLoginActivity.this);够了 啊哈我明白你的意思了,谢谢你,但是 ActivityOptionsCompat 是必须要有这个新的过渡【参考方案4】:不要忘记在AndroidManifest.xml
中应用活动主题或整个包。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.package"
android:theme="@style/BaseAppTheme">
....
....
</manifest>
【讨论】:
以上是关于Android过渡动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章