2

因此,我们尝试创建从 ListView 中的图像到 ViewPager 库中的图像的跨活动图像转换。在执行此转换时,我们看到动画在 ViewPager 完成加载/绘图之前发生。这会导致 ViewPager 上的图像闪烁,从而使动画看起来很糟糕。

作为测试,我们将图像放在上面以伪造正在加载的 ViewPager 的外观。然后我们从 ListView 中的图像过渡到这个“虚拟”ImageView,然后在过渡完成后将其隐藏。这有所帮助,但仍然没有创造流畅的体验,因为一旦 ViewPager 完成绘图,事情就会闪现。

任何提示将不胜感激!

4

2 回答 2

9

根据 George Mount 的回答,您可以尝试在您调用的 ActivityonCreate()方法中添加以下代码:

postponeEnterTransition(); 
viewPager.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
    public boolean onPreDraw() { 
        viewPager.getViewTreeObserver().removeOnPreDrawListener(this);
        startPostponedEnterTransition();
        return true;
    }
});
于 2014-12-18T22:36:36.423 回答
4

这里有一些想法:

您可以使用 ViewPager 活动中的 Activity.postponeEnterTransition() 延迟转换,直到 ViewPager 活动准备好。当它准备好开始转换时,运行 Activity.startPostponedEnterTransition()。

如果您希望转换发生得更快并且图像相似(没有不同的裁剪),您可以使用共享元素快照并对其进行缩放。您可以在此处查看使用快照的示例:https ://halfthought.wordpress.com/2014/12/10/reveal-challenge/

如果您调用的 Activity 中的图像被裁剪,但您有一个未裁剪的图像支持它(例如 ImageView 裁剪图像),您可以覆盖调用 Activity 中的 onCaptureSharedElementSnapshot 以在调用 Activity 中返回未裁剪的位图。然后在您的 ViewPager Activity 中,您可以使用 onCreateSharedElementSnapshot 为您的过渡选取该图像。

于 2014-12-18T22:25:00.647 回答