我关注了这个article of android develop blog,这是他的source code。
该演示效果很好,但是通常我们更喜欢在图像列表中使用centerCrop
缩放比例类型,并在详细信息模式下使用fitCenter
。当我修改代码以实现此目的时,过渡无法处理比例类型的更改。从详细信息片段返回时,动画以错误的缩放比例类型开始。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLmxvbGkubmV0LzIwMjAvMDIvMjMvR1VUbVc1NFF2YzdYb0xuLmdpZiJ9” alt =“>
我找到了ChangeImageTransform
转换。该文件说:
此过渡在场景更改之前和之后捕获ImageView的矩阵,并在过渡期间对其进行动画处理。
与ChangeBounds结合使用,ChangeImageTransform允许更改大小,形状或ImageView.ScaleType的ImageView平滑地为内容设置动画。
所以我更改了转换集:
ChangeImageTransform
但是动画变得越来越丑陋:
如何在不同比例类型之间平滑转换?
使用ChangeBounds时,您需要转换child and parent元素,过渡才能正常工作。每当元素从左上角进入时(如第二个视频中一样),您就可以假定父视图也没有被过渡。<transitionSet
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="375"
android:interpolator="@android:interpolator/fast_out_slow_in"
android:transitionOrdering="together">
<changeBounds/>
<changeImageTransform/>
</transitionSet>
我将确保CardView也被视为共享元素,这意味着您将需要更新第二个片段布局,以便ImageView位于CardView内部。
还请注意,每个共享元素都需要一个唯一的transitionName ...这在过去对我造成了问题。