如何更改animateLayoutChanges机制使用的animation?

我有一个用户select一个项目的RecyclerView 。 一旦select某个视图就会在文本之前变得可见(见图)。 我想animation的外观。

图示

项目的布局上的animateLayoutChanges属性完美地完成了这项工作,除了视图外观的animationtypes – 它淡入。我希望它从0到100%的大小缩放,我相信它被称为“popup”animation。

如果我禁用animateLayoutChanges并使用XMLanimation,它可以工作,但附近的文本不再是animation的(它应该滑动以容纳视图和边距的空间)。 它立即向右移动,然后播放animation。 逆向animation更糟糕,因为文本在视图消失之前与视图重叠。

所以我需要把默认机制和我自己的animation结合起来。 如果不深入定制animation,最简单的方法是什么?

Solutions Collecting From Web of "如何更改animateLayoutChanges机制使用的animation?"

在错误的地方挖了很多之后,我自己find了答案。 可能帮助某人。

animateLayoutChanges属性(如果启用)使用LayoutTransition的实例在ViewGroup执行其作业。

所以为了改变animation,你可以创build一个LayoutTransition的实例,为你需要改变的转换设置Animator ,然后通过setLayoutTransition()把这个实例分配给ViewGroup

在我的情况下,结果是:

 Animator scaleDown = ObjectAnimator.ofPropertyValuesHolder((Object)null, PropertyValuesHolder.ofFloat("scaleX", 1, 0), PropertyValuesHolder.ofFloat("scaleY", 1, 0)); scaleDown.setDuration(300); scaleDown.setInterpolator(new OvershootInterpolator()); Animator scaleUp = ObjectAnimator.ofPropertyValuesHolder((Object)null, PropertyValuesHolder.ofFloat("scaleX", 0, 1), PropertyValuesHolder.ofFloat("scaleY", 0, 1)); scaleUp.setDuration(300); scaleUp.setStartDelay(300); scaleUp.setInterpolator(new OvershootInterpolator()); LayoutTransition itemLayoutTransition = new LayoutTransition(); itemLayoutTransition.setAnimator(LayoutTransition.APPEARING, scaleUp); itemLayoutTransition.setAnimator(LayoutTransition.DISAPPEARING, scaleDown); ViewGroup av = (ViewGroup)v.findViewById(R.id.animated_layout); av.setLayoutTransition(itemLayoutTransition); 

有关LayoutTransition参考文档的更多信息。