【问题标题】:Shared element transition between two different applications in Android?Android中两个不同应用程序之间的共享元素转换?
【发布时间】:2014-11-04 17:02:08
【问题描述】:

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

【问题讨论】:

  • 理论上,即使两个活动属于不同的应用程序,共享元素转换也应该起作用。显然,这两个应用程序需要相互协调才能使转换正常工作(即,两者都需要在共享元素上设置相同的transitionName,等等)。你自己测试过吗?
  • @AlexLockwood 我没有,但我会的,因为没有其他人这样做;)

标签: android android-5.0-lollipop shared-element-transition activity-transition


【解决方案1】:

是的,共享元素可以在不同的应用程序之间工作。您必须同意在两个应用程序之间共享的通用名称。通常这是使用@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));
        }
    });

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

【讨论】:

  • 那么理论上可以在不同的应用中定义两个不同的过渡资源吗?
  • 是的。它的行为方式与您在同一应用程序中的不同活动上使用不同转换的方式相同。共享元素退出转换作用于调用活动,并将延迟共享元素到被调用活动的传输,直到它完成。共享元素进入转换将共享元素从初始位置移动到最终位置。退出转换作用于调用活动并作用于离开视图。 enter Activity 作用于被调用的 Activity 并影响进入视图。
  • @GeorgeMount 你提到如果调用和被调用的活动不在同一个任务中,共享元素活动选项将被拒绝。对于没有任何共享元素的退出/进入内容转换也是如此吗?
  • 是的。我想没有必要拒绝没有共享元素的活动转换,但它们目前是。我们可以考虑在未来改变它。
猜你喜欢
  • 2015-10-26
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
相关资源
最近更新 更多