3

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

4

1 回答 1

7

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

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

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

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));
        }
    });

当您共享具有视图列表的内容时,此功能很重要,其中任何一个都可以共享。例如,联系人列表将包含具有不同转换名称的所有联系人图像。从单个联系人转到该联系人列表,您需要将单个共享联系人映射到列表中的一个联系人。

于 2014-11-03T23:52:16.703 回答