You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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()

目标效果参考

iOS图标抖动效果示意图


内容的提问来源于stack exchange,提问作者Bob Redity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:57:18