如何在Android实现类似iOS长按图标的中心固定倾斜抖动动画?
类iOS桌面编辑态图标中心固定倾斜抖动动画实现
当前实现出现控件整体移动、不符合预期倾斜摆动效果,核心是三个配置问题:
- 旋转锚点
pivotX/pivotY设置为40%,支点落在控件偏左上位置,旋转时必然带动控件整体偏移 - 额外叠加的
translate平移动画会强制控件位移,和绕固定点倾斜摆动的需求完全冲突 - 70ms的动画时长、1度的旋转角度参数不对,抖动节奏和幅度过于生硬
正确实现代码
在res/anim目录下新建动画配置文件view_icon_shake.xml:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:duration="100" android:fromDegrees="-2" android:pivotX="50%" android:pivotY="10%" android:repeatCount="infinite" android:repeatMode="reverse" android:toDegrees="2" android:interpolator="@android:anim/linear_interpolator"/> </set>
参数说明
- 锚点设置:
pivotX="50%"对齐控件水平中心,pivotY="10%"落在控件靠近顶部的位置,完全匹配iOS图标抖动时的支点位置,旋转时控件不会出现整体位移 - 角度设置:±2度的往复旋转幅度,和iOS原生抖动幅度一致,不会过于夸张
- 时长设置:100ms的单段动画时长,摆动节奏自然,不会出现过快抽搐的效果
如果要更还原iOS桌面的错落感,可以给不同图标设置±0.5度的角度偏移、10-20ms的时长差,避免所有图标摆动节奏完全一致显得生硬。
调用方式
代码中给控件启动/停止动画:
// 启动抖动 val shakeAnim = AnimationUtils.loadAnimation(context, R.anim.view_icon_shake) iconView.startAnimation(shakeAnim) // 退出编辑态停止抖动 iconView.clearAnimation()
目标效果参考

内容的提问来源于stack exchange,提问作者Bob Redity
相关产品推荐
相关产品推荐

