gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:36:10 26 4
gpt4 key购买 nike

我有一个 RecyclerView,用户可以在其中选择一个项目。选择后,某些 View 在文本之前变得可见(见图)。我想为它的外观制作动画。

Graphical representation

项目布局上的

animateLayoutChanges 属性完美地完成了这项工作,除了 View 外观的动画类型 - 它淡入。我希望它从 0 缩放到 100% 大小,我相信它被称为“弹出”动画。

如果我禁用 animateLayoutChanges 并为此使用 XML 动画,它可以工作,但附近的文本不再是动画的(它应该滑动以适应 View 及其边距的空间)。它立即向右移动,然后播放动画。反向动画的情况更糟,因为文本在消失之前就与 View 重叠了。

所以我需要以某种方式将默认机制和我自己的动画结合起来。在不深入研究自定义动画的情况下,最简单的方法是什么?

最佳答案

在错误的地方挖掘了很多之后,我自己找到了答案。可能会对某人有所帮助。

animateLayoutChanges 属性(如果启用)利用 LayoutTransition 的实例在 ViewGroup 中完成其工作。

所以为了改变动画,你可以创建一个LayoutTransition的实例,为你需要改变的过渡设置Animator,然后将该实例分配给ViewGroup 通过 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);

更多信息请访问 LayoutTransition reference documentation .

关于android - 如何更改 animateLayoutChanges 机制使用的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35174753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com