实施活动共享元素转换的活动。它工作正常,但在极少数运行> = LOLLIPOP的设备上接收崩溃。
报告:
Intent intent = new Intent(Activity1.this, Activity2.class);
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(Activity1.this,
logoImageView,
ViewCompat.getTransitionName(logoImageView));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
startActivity(intent, options.toBundle());
} else {
startActivity(intent);
}
overridePendingTransition(R.anim.stay, R.anim.stay);
尝试了这个:
Intent intent = new Intent(Activity1.this, Activity2.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation(Activity1.this,
logoImageView,
getString(R.string.splashLogoSharedTransition));
startActivity(intent, options.toBundle());
} else {
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(SplashActivity.this,
logoImageView,
getString(R.string.splashLogoSharedTransition));
ActivityCompat.startActivity(SplashActivity.this, intent, options.toBundle());
}
overridePendingTransition(R.anim.stay, R.anim.stay);
然后来自此IllegalArgumentException in ActivityManagerProxy:
startActivity(intent, options.toBundle());
以下两个代码都会发生崩溃:
origin
曾经面对过吗?任何提示?
答案 0 :(得分:2)
好像您正在使用Window.FEATURE_CONTENT_TRANSITIONS
。但相反,您应该使用Window.FEATURE_ACTIVITY_TRANSITIONS
。
在styles-v21.xml
中,添加:
<item name="android:windowActivityTransitions">true</item>
<!-- optional -->
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
来自文档:
Window.FEATURE_CONTENT_TRANSITIONS
:
允许活动通过发送或接收使用
ActivityOptions
或makeSceneTransitionAnimation(Activity, Pair[])
创建的makeSceneTransitionAnimation(Activity, View, String)
捆绑包来运行活动转换。
Window.FEATURE_ACTIVITY_TRANSITIONS
:
请求窗口内容更改的标记应使用
TransitionManager
进行动画处理。使用
TransitionManager
设置setTransitionManager(TransitionManager)
。如果未设置,则将使用默认的TransitionManager。
有关详细信息,请参阅this post。
答案 1 :(得分:0)
根据这篇文章,你不应该在API 21上面使用ActivityOptionsCompat: https://stackoverflow.com/a/42455484/1067763
我不使用它,但我仍然有这个崩溃:
Crashes after startActivityForResult in API 27
我认为它仍然以某种方式使用了错误的版本。
但是,知道这一点,你或许可以解决你的问题。