如何更改animateLayoutChanges机制使用的动画?

mrn*_*ver 19 layout animation android

我有一个RecyclerView用户选择一个项目.选择后,某些视图在文本之前变为可见(参见图像).我想为它的外观设置动画.

图示

animateLayoutChanges 项目布局上的属性完美地完成了工作,除了视图外观的动画类型 - 它淡入.我希望它从0到100%大小缩放,我相信它被称为'弹出'动画.

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

所以我需要以某种方式组合默认机制和我自己的动画.如果不深入研究自定义动画,最简单的方法是什么?

mrn*_*ver 34

经过多次挖掘错误的地方后,我自己找到了答案.可能会帮助别人.

animateLayoutChanges如果启用了属性,则使用一个实例LayoutTransition来完成其工作ViewGroup.

因此,为了更改动画,您可以创建一个实例LayoutTransition,Animator为需要更改的转换设置,然后将该实例分配给ViewGroupvia setLayoutTransition().

在我的情况下,结果是:

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);
Run Code Online (Sandbox Code Playgroud)

LayoutTransition参考文档中的更多信息.

  • 为了使这个示例正常工作,您需要将视图实例(需要动画)而不是 null 传递给调用“(ofPropertyValuesHolder((Object) null” – 将“(Object) null”替换为您的“视图” `。 (2认同)