Android中两个不同应用程序之间的共享元素转换?
是否有可能在两个不同的应用程序之间使用共享元素转换?是的,共享元素将在不同的应用程序之间工作。您必须就两个应用程序之间共享的通用名称达成一致。通常这是通过@AlexLockwood建议的transitionName完成的,但是视图不必使用相同的名称。如果你这样做了,你会得到很多免费的帮助 在应用程序之间共享元素有一个重要方面——它们必须在同一个任务中。如果活动选项不在同一任务中,它们将被拒绝 如果要在布局中使用不同的TransitionName,只需执行以下操作:Android中两个不同应用程序之间的共享元素转换?,android,android-5.0-lollipop,shared-element-transition,activity-transition,Android,Android 5.0 Lollipop,Shared Element Transition,Activity Transition,是否有可能在两个不同的应用程序之间使用共享元素转换?是的,共享元素将在不同的应用程序之间工作。您必须就两个应用程序之间共享的通用名称达成一致。通常这是通过@AlexLockwood建议的transitionName完成的,但是视图不必使用相同的名称。如果你这样做了,你会得到很多免费的帮助 在应用程序之间共享元素有一个重要方面——它们必须在同一个任务中。如果活动选项不在同一任务中,它们将被拒绝 如果要在布局中使用不同的TransitionName,只需执行以下操作: ActivityOptions
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
this, view, "remoteName");
startActivity(intent, options.toBundle());
现在,如果远程应用程序在其布局文件中使用“remoteName”作为transitionName,那么它不需要做任何特殊的事情。但是,如果使用其他名称,则必须将名称映射到视图:
setEnterSharedElementCallback(new SharedElementCallback() {
@Override
public void onMapSharedElements(List<String> names,
Map<String, View> sharedElements) {
// You may want to validate that names contains "remoteName"
// if this can be instantiated with different shared elements
sharedElements.put("remoteName", findViewById(R.id.mySharedElement));
}
});
setEnterSharedElementCallback(新的SharedElementCallback(){
@凌驾
APSharedElements(列表名称,
地图共享(删除){
//您可能希望验证名称是否包含“remoteName”
//如果可以用不同的共享元素实例化
sharedElements.put(“remoteName”,findViewById(R.id.mySharedElement));
}
});
当您共享到具有视图列表(其中任何视图都可以共享)的对象时,此功能非常重要。例如,联系人列表将包含具有不同TransitionName的所有联系人图像。从单个联系人到该联系人列表,您需要将单个共享联系人映射到列表中的一个联系人。从理论上讲,即使两个活动属于不同的应用程序,共享元素转换也应该有效。显然,这两个应用程序需要相互协调,以使转换正常工作(即,两个应用程序都需要在共享元素上设置相同的
transitionName
,等等)。你自己测试过吗?@AlexLockwood我没有,但我会,因为没有其他人测试过;)因此,理论上可以在不同的应用程序中定义两种不同的过渡资源?是的。它的行为方式与您在同一应用程序中的不同活动上使用不同的转换相同。共享元素退出转换对调用活动有效,并将延迟共享元素到被调用活动的传输,直到完成为止。“共享图元输入”转换将共享图元从初始位置移动到最终位置。退出转换对调用活动起作用,并对离开视图起作用。“输入”活动对被调用的活动有效,并影响输入视图。@GeorgeMount您提到如果调用和被调用的活动不在同一任务中,共享元素活动选项将被拒绝。对于没有任何共享元素的退出/进入内容转换也是如此吗?是。我认为没有必要拒绝没有共享元素的活动转换,但它们目前是。我们可以考虑在将来改变它。