【问题标题】:Share element transition between recyclerview item inside viewpager fragment to viewpager fragment在 viewpager 片段内的 recyclerview 项目与 viewpager 片段之间共享元素转换
【发布时间】:2018-07-13 04:35:53
【问题描述】:

我有两个活动MainAcitityDetailActivityMainActivityviewpager 的片段中包含recyclerview。当我点击项目时,它将转到DetailActivity 并在DetailAcitivty 中显示viewpager 的片段内的详细信息。

问题是:

  1. 当我点击MainActivity中的recyclerview项目并转到DetailActivity时,我想添加transition

  2. 当我从DetailActivity 回到MainActivity 时,我希望它的过渡会出现在我在viewpager 中滑动的项目上。

我怎样才能做到这一点?

注意:

-MainAcitivtyDetailAcitivty 都包含viewpager

谢谢!

【问题讨论】:

    标签: android android-fragments android-recyclerview android-viewpager transition


    【解决方案1】:

    您需要使用唯一的 transitionName 标记您的两个视图。

    ViewCompat.setTransitionName(imageView, "some_unique_transitionName");
    

    使用这些新信息开始新活动

    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, imageView, ViewCompat.getTransitionName(imageView));
    
    activity.startActivity(intent, options.toBundle());
    

    现在,关于新活动: 根据您打开下一个活动的方式以及它的视图层次结构的复杂程度,您可能希望在 onCreate 期间利用 supportPostponeEnterTransition(); 并在稍后设置时利用 supportStartPostponedEnterTransition();。我会让你阅读它的文档

    除此之外,找到需要动画的新活动的视图并在其上设置过渡名称

    activityImage.setTransitionName(transitionName);
    

    让它撕裂。

    您可能想要修改的其他一些东西可能是动画持续时间、插值器等。

     getWindow().getSharedElementEnterTransition().setDuration(200);
        getWindow().getSharedElementReturnTransition().setDuration(200)
                .setInterpolator(new DecelerateInterpolator());
    

    还有,你的活动的进入/退出转换(你需要这个)

        Fade fade = new Fade();
        fade.excludeTarget(android.R.id.statusBarBackground, true);
        fade.excludeTarget(android.R.id.navigationBarBackground, true);
        getWindow().setEnterTransition(fade);
        getWindow().setExitTransition(fade);
    

    请记住,共享元素转换遍历整个视图层次结构以找出源视图和目标视图,并且只有在目标活动完全放置后,框架反向转换才能给您想要实现的错觉,所以是的,如果视图层次结构很复杂或活动需要时间来设置等(取决于网络),您可能需要多做一些修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 2021-03-04
      相关资源
      最近更新 更多