【问题标题】:Android: speeding up shared element transition between activitiesAndroid:加快活动之间的共享元素转换
【发布时间】:2015-07-14 12:37:15
【问题描述】:

我在两个活动之间有一个共享元素转换,其工作方式如下:

Intent someintent = new Intent(this, someclass.class);

        if (Build.VERSION.SDK_INT >= 21) {

            ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this
                    , new Pair<>(viewClicked.findViewById(R.id.someimage), "someimage")
                    , new Pair<>(viewClicked.findViewById(R.id.someicon), "someicon")
            );
            startActivity(someintent, options.toBundle());
        }
        else {
            startActivity(someintent);
        }

这工作正常,但过渡非常缓慢。当第一次单击图像时,它似乎会在过渡发生之前停顿一两秒钟。这是由于正在加载的活动的“重量”还是延迟可配置?

【问题讨论】:

  • 您要转换到哪种视图?当我使用需要从网络抓取的图像时,我看到了延迟 - 在这种情况下,我延迟了输入转换(API 的一部分),直到图像完全下载/显示。
  • @Booger 我正在从一个包含图像回收视图的活动过渡到另一个包含内部具有相同图像的片段的活动。视图本身是一个常规的 ImageView。

标签: java android user-interface transition


【解决方案1】:

您是否尝试更改enterTransitionreturntransition 的持续时间:

    private Transition enterTransition() {
        ChangeBounds bounds = new ChangeBounds();
        bounds.setDuration(2000);

        return bounds;
    }

    private Transition returnTransition() {
        ChangeBounds bounds = new ChangeBounds();
        bounds.setInterpolator(new DecelerateInterpolator());
        bounds.setDuration(2000);

        return bounds;
    }

onCreate:

getWindow().setSharedElementEnterTransition(enterTransition());
getWindow().setSharedElementReturnTransition(returnTransition());

【讨论】:

  • 谢谢 - 我尝试在转换中的 fromActivity 和 toActivity 中都使用它,它不会影响速度。所以,如果这是改变转换时间的唯一方法,那么我猜测片段的重量会导致延迟。非常感谢您的帮助
【解决方案2】:

另一种可能对已经在其样式中设置了过渡设置的人有所帮助的方法:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().getSharedElementEnterTransition().setDuration(2000);
    getWindow().getSharedElementReturnTransition().setDuration(2000)
        .setInterpolator(new DecelerateInterpolator());
}

【讨论】:

  • 如果设置你的代码我会崩溃:window.sharedElementEnterTransition 不能为空
  • @famfamfam 您需要确保为您的过渡进行了适当的设置。没有看到代码很难说。您可以添加一个空检查或在 Kotlin 中编写它来避免此错误,但它不会解决问题。
猜你喜欢
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 2014-12-21
  • 2018-07-30
  • 1970-01-01
  • 2019-01-20
  • 2015-06-15
相关资源
最近更新 更多