我有3个活动:ActivityA-> ActivityB-> ActivityC

我有一个从ActivityAActivityB的共享元素过渡,缩略图逐渐变成了ActivityB的背景。如果在ActivityB中单击“后退”,则会调用返回共享元素转换:背景视图缩小到ActivityA中的缩略图位置。

如果我没有点击“后退”,则ActivityB会加载一些数据,导航至ActivityC并完成操作。

ActivityC的视图与ActivityAActivityB之间共享的视图相同(也具有相同的transitionName)。当我从ActivityC击中“后退”时,我希望以与从ActivityBActivityA击中“后退”时所调用的方式相同的方式调用返回共享元素转换-背景缩小放在ActivityA中的缩略图位置。

导航代码:

/* thumbnailView is the view in ActivityA that grows into ActivityB */
void navigateToActivityB(Activity activityA, View thumbnailView) {

    // Build options
    List<Pair<View, String>> pairs = new ArrayList<>();
    pais.add(Pair.create(thumbnailView, "thumbnailTransition"));
    Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(activityA, pairs.toArray(new Pair[pairs.size()])).toBundle();

    // Navigate
    Intent intent = new Intent(activityA, ActivityB.class);
    ActivityCompat.startActivity(activityA, intent, options);
}

/**
 * Here I don't have thumbnailView anymore (since it's in ActivityA
 * and I'm coming from ActivityB, so I can't include it in the
 * shared element pairs.
 */
void navigateToActivityC(Activity activityB) {

    // Build options - I wish I could use the pairs but I don't know how
    // List<Pair<View, String>> pairs = new ArrayList<>();
    // pais.add(Pair.create(thumbnailView, "thumbnailTransition"));
    Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(activityB).toBundle();

    // Navigate
    Intent intent = new Intent(activityB, ActivityC.class);
    ActivityCompat.startActivity(activityB, intent, options);
}


活动B

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TransitionInflater inflater = TransitionInflater.from(context);
    getWindow().setSharedElementEnterTransition(inflater.inflateTransition(R.transition.shared_element_enter));
    getWindow().setSharedElementReturnTransition(inflater.inflateTransition(R.transition.shared_element_return));


活动C

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TransitionInflater inflater = TransitionInflater.from(context);

    // This transition doesn't work :(
    getWindow().setSharedElementReturnTransition(inflater.inflateTransition(R.transition.shared_element_return));


编辑:

值得一提的是,我进行了一次测试,将ActivityA的缩略图视图保留在某个静态变量中。然后,当导航到ActivityC时,我以与options中相同的方式在此视图中生成了navigateToActivityB参数,在这种情况下,返回转换有效。不过,这不是一个可行的解决方案,这是因为以这种方式保存视图非常糟糕(但是我没有其他方法可以在活动之间传递视图),还因为它导致了一些奇怪的瑕疵()。

最佳答案

documentation所述


  setSharedElementReturnTransition
  
  设置过渡,该过渡将用于将共享元素转移回调用方活动。


在这里,您完成了呼叫活动ActivityB。这意味着它没有返回呼叫活动。因此,不会显示过渡。

您可能想使用setSharedElementExitTransition

关于android - Android共享元素返回到先前 Activity 的过渡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42608929/

10-11 20:09