我已经花了几个星期的时间来解决这个问题,但仍然无法解决。
所以,我有一个包含ImageView的LinearLayout的CardView。
如果没有圆角,共享元素转换可以很好地工作。但是,当我将卡片添加半径(app:cardCornerRadius =“25dp”)时,共享元素转换看起来很丑,因为它会先删除半径,然后开始动画。
第一种方法:ObjectAnimator
我创建了一个ObjectAnimator来动画化卡片上的半径值,并在动画结束后开始转换。
ObjectAnimator animator = ObjectAnimator
.ofFloat(view, "radius", AppUtil.dpAsPixel(this, 25), 0);
animator.setDuration(150);
animator.addListener( // start new Activity with Transition );
animator.start();
这个方法是可行的,但效果不太好,因为过渡效果需要等待动画完成后才开始过渡。我需要的是在执行过渡到新活动时半径正在进行动画(类似于TransitionSet中的ORDERING_TOGETHER)。
第二种方法-改变图像变换
我阅读了一个StackOverflow文章,使用Transformation类,如ChangeImageTransform和ChangeBounds。
我按照建议定义了我的应用程序主题(my_transition包含ChangeImageTransform transitionSet)。
<item name="android:windowSharedElementEnterTransition">@transition/my_transition</item>
<item name="android:windowSharedElementExitTransition">@transition/my_transition</item>
但是它不起作用...
第三种方法 - 朴素的
我的最后一次尝试是强制目标ImageView也具有25dp的半径。因为也许我的CardView被转换成正方形是因为目标ImageView是正方形,但是你可以猜到,它并不能起作用。
第四种方法 - 不使用CardView
如您所见,我正在使用企鹅图片并使用CardView来创建半径。我可以使用图像转换使图像变圆,但我仍然认为这不是创建共享元素过渡的正确方式...
我的问题是,是否有一种方法可以使带有CardView半径的共享元素过渡在不先删除半径的情况下工作?
CardView
添加到共享场景中吗?例如,可以将R.id.iv_image_cover
替换为CardView
。 - azizbekian