Android动画:如何将ImageButton动画还原至初始位置?
嘿,我明白你遇到的问题了——直接用-y作为属性名肯定不行,因为ObjectAnimator只能识别View已有的合法属性名(这里y是View的标准属性),不能随便加符号来实现反向效果。下面给你两种简单靠谱的实现方式:
方法1:记录初始位置,动画回到该位置
这是最通用的方案,不管你什么时候想让按钮回到原位都能用。首先在动画开始前保存ImageButton的初始Y坐标,之后要返回时就基于这个值创建动画:
// 先保存初始位置(比如在Activity的onCreate或者按钮初始化阶段) float originalY = img.getY(); // 你原来的向下移动动画 ObjectAnimator moveDownAnim = ObjectAnimator.ofFloat(img, "y", 300f); moveDownAnim.setDuration(1000); moveDownAnim.start(); // 回到初始位置的动画 ObjectAnimator moveUpAnim = ObjectAnimator.ofFloat(img, "y", originalY); moveUpAnim.setDuration(1000); moveUpAnim.start();
方法2:直接反转已有的动画
如果你是在向下动画结束后立刻想让它回去,可以直接调用已有动画对象的reverse()方法,它会自动帮你反向执行动画:
ObjectAnimator moveDownAnim = ObjectAnimator.ofFloat(img, "y", 300f); moveDownAnim.setDuration(1000); moveDownAnim.start(); // 比如点击某个按钮触发返回动画 someTriggerButton.setOnClickListener(v -> { // 反转动画,从当前位置回到初始位置 moveDownAnim.reverse(); });
注意:就算动画已经执行完毕,调用reverse()依然有效,它会从动画的结束值(300f)回到起始的初始Y坐标。如果需要让按钮来回重复移动,还可以给动画设置setRepeatMode(ValueAnimator.REVERSE)和setRepeatCount(),这算是额外的扩展技巧啦。
内容的提问来源于stack exchange,提问作者AANN
相关产品推荐
相关产品推荐

