translateAnimation.setFillxxx()作用是什么?

本文介绍了在Android中使用after和before参数来控制动画结束后的显示效果。通过设置这些参数,可以实现动画结束后停留在最后一帧或者回到初始状态的第一帧。

after,before 是用于设置动画结束之后画面停留的是哪帧。

translateAnimation.setFillAfter(true);

动画结束后停留在最后一帧(动画结束后画面不变)。

translateAnimation.setFillBefore(true);

动画结束后停留在第一帧(位置画面停留在动画开始位置)。

### `ObjectAnimator` 与 `TranslateAnimation` 在 Android 滚动动画中的区别 #### 动画机制 - **`ObjectAnimator`** 是属性动画框架的一部分,它直接操作对象的属性值来实现动画效果。这意味着在动画执行过程中,`View` 的实际属性(如 `translationX` 或 `translationY`)会被修改,并且这些变化是持久化的。 - **`TranslateAnimation`** 属于视图动画(Tween Animation),它通过计算视图的位置变化并在屏幕上渲染出移动的效果。然而,这种动画并没有改变 `View` 的实际位置属性;它只是对视图进行视觉上的变换[^2]。 #### 动画精度和性能 - **`ObjectAnimator`** 提供了更高的精度和灵活性,因为它基于属性动画系统,可以利用硬件加速并支持更复杂的动画逻辑,例如动画集、监听器以及动态插值器[^3]。 - **`TranslateAnimation`** 虽然简单易用,但在某些设备上可能会出现视觉问题,例如残影或光标错位。这是因为 `TranslateAnimation` 实际上是对视图进行截图后进行动画渲染,而不会真正改变视图的实际位置属性[^4]。 #### 动画生命周期和状态 - **`ObjectAnimator`** 允许开发者精确控制动画的生命周期,包括开始、结束、重复以及暂停等状态。此外,由于它直接修改视图的属性,因此可以更容易地与其他 UI 组件进行交互。 - **`TranslateAnimation`** 的生命周期相对简单,但其局限性在于动画结束后视图会恢复到原始状态,除非手动调整视图的位置属性以匹配动画后的视觉效果。 #### 示例代码对比 以下是两种方式实现滚动动画的示例: ##### 使用 `ObjectAnimator` ```java ObjectAnimator translation = ObjectAnimator.ofFloat(mButton, "translationX", curTranslationX, 300, curTranslationX); translation.setDuration(5000); translation.start(); ``` ##### 使用 `TranslateAnimation` ```java TranslateAnimation translateAnimation = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f ); translateAnimation.setDuration(5000); mButton.startAnimation(translateAnimation); ``` #### 适用场景 - **`ObjectAnimator`** 更适合需要高精度控制和持久化属性变化的场景,例如复杂的组合动画或需要与用户交互的动画效果。 - **`TranslateAnimation`** 更适合简单的视图动画需求,尤其是在不需要改变视图实际位置的情况下,例如临时性的视觉提示或过渡效果。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值