【问题标题】:Applying translate and scale animations sequentially按顺序应用平移和缩放动画
【发布时间】:2011-12-20 15:33:20
【问题描述】:

我正在尝试为我的游戏关卡选择菜单创建某种画廊视图。水平放置了三个项目和两个按钮:左和右。当我按下右键时,这三个项目应该都向左移动,当单击左键时 - 项目向右移动。我发现使用变换动画android:fillAfter 属性存在问题:如果它是true,并且我第一次单击一个按钮,项目将移动到它们必须移动的位置并按预期停留在那里。但是在第二次单击时,它们会从初始位置开始移动,这意味着它们的实际坐标在第一次转换后不会改变。我错过了什么吗?我怎样才能实现这个目标?

【问题讨论】:

    标签: android animation coordinates transform tween


    【解决方案1】:

    android:fillAfter 不会改变视图的属性。这只是意味着它们在动画完成后绘制到位,但它们的物理属性是相同的。您的翻译动画可能是相对于它们物理位置的动画。另请注意,视图实际上并不在您移动它们的位置,这意味着如果用户触摸它们,触摸将不会注册。如果用户触摸他们曾经所在的位置,他们就会注册。

    在这种情况下,您需要做的是将它们从当前查看的位置动画到您希望它们出现的位置。

    可能的解决方案:

    从左到右:

    TranslateAnimation (Animation.RELATIVE_TO_PARENT, 0.0, Animation.RELATIVE_TO_PARENT, 1.0, Animation.RELATIVE_TO_PARENT, 0.0, Animation.RELATIVE_TO_PARENT, 0.0);
    

    从右到左:

    TranslateAnimation (Animation.RELATIVE_TO_PARENT, 1.0, Animation.RELATIVE_TO_PARENT, 0.0, Animation.RELATIVE_TO_PARENT, 0.0, Animation.RELATIVE_TO_PARENT, 0.0);
    

    在这种情况下,相对于父级,我从左到右从 0% 到 100% 设置动画。启用fillAfter 后,视图将(明显)保留。之后,我将相对于父级从右到左从 100% 到 0% 设置动画。

    【讨论】:

    • 感谢您的回答,但这就是我实际在做的事情。每次我对一个项目应用 100% 的左偏移,但每次它只是从其初始位置移动。有没有办法在动画结束后重新定义视图的坐标?
    • 对于蜂窝之前的动画,我认为没有办法在不自己更改属性的情况下做到这一点。您可能需要一个自定义视图来读取其当前位置 onAnimationEnd,更改其位置,然后强制通过 layout
    • @Egor:我可能在这里说的是显而易见的,但这是唯一想到的其他事情。您可能还想尝试将fillBefore 属性也应用于true。默认情况下为 true,但如果您将其设置为 false(以及将fillEnabled 设置为 true),则动画的初始属性将不会在动画之前应用。
    猜你喜欢
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 2015-03-30
    • 2013-12-17
    • 2011-03-31
    • 2012-07-08
    • 2018-05-13
    • 2011-07-04
    相关资源
    最近更新 更多