2

是否有可能在两个不同的应用程序之间使用共享元素转换?Android中两个不同应用程序之间的共享元素转换?

+1

理论上,即使两个活动属于不同的应用程序,共享元素转换也应该可以工作。很显然,两个应用程序需要相互协调才能正常工作(即两者都需要在共享元素上设置相同的'transitionName'等)。你自己测试过了吗? – 2014-11-03 18:36:52

+0

@AlexLockwood我没有,但我会因为没有人做;) – pixel 2014-11-03 19:34:04

回答

7

是的,共享元素将在不同的应用程序之间工作。你必须同意在这两个应用程序之间共享一个通用名称。通常,这是通过@AlexLockwood建议的transitionName完成的,但视图不必携带相同的名称。如果你这样做,你会得到很多免费的帮助。

在应用程序之间共享元素有一个重要方面 - 他们必须处于相同的任务。如果活动选项不在同一个任务中,它们将被拒绝。

如果你想在布局中使用不同的transitionNames,你只是这样做:

​​3210

现在,如果远程应用程序中使用“远程名”在其布局文件的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)); 
     } 
    }); 

这个功能是非常重要的。例如,联系人列表将包含具有不同transitionNames的所有联系人图像。从单个联系人到联系人列表,您需要将单个共享联系人映射到列表中的联系人之一。

+0

因此,理论上可以在不同的应用程序中定义两个不同的转换资源? – pixel 2014-11-14 16:04:14

+1

是的。它的行为方式与在同一个应用程序中对不同的活动使用不同的转换方式相同。共享元素退出转换对调用活动起作用,并将延迟共享元素到被调用活动的转移,直到完成。共享元素输入转换将共享元素从初始位置移动到最终位置。退出过渡适用于调用活动并针对离开的视图工作。进入活动对被调用的活动起作用并影响输入视图。 – 2014-11-16 00:18:08

+0

@GeorgeMount您提到,如果主叫和被叫活动不在同一个任务中,共享元素“活动选项”将被拒绝。这对于退出/输入没有任何共享元素的内容转换也是如此吗? – 2014-12-18 22:48:32

相关问题