设 scaleX 为 0 会导致 View 宽度归零而完全不可见且无法交互,应改用 0.01 或 0.1 作为合理起点;XML 中必须写为带小数点的字符串如 "0.1";需配合 pivotX 控制缩放中心;推荐优先使用 ViewPropertyAnimator 替代 XML。

scaleX 在 XML 动画里设成 0 会直接不可见
Android 的 scaleX 是相对于 View 当前宽度的缩放比例,不是像素值。设成 0 意味着宽度压缩为 0,View 就彻底“消失”了——不是透明,是没尺寸,连点击区域都没了。
- 常见错误:想做“从无到有”的入场动画,就写
fromXScale="0",结果动画一启动 View 就卡死或点不动 - 合理起点:一般用
0.01或0.1,视觉上接近“未出现”,但保留基础渲染和交互能力 - 注意兼容性:
ScaleAnimation在 API 11+ 和ViewPropertyAnimator行为一致;但老版本用Animation类时,fromXScale="0"还可能触发测量异常
XML 中 fromXScale / toXScale 必须是浮点数字符串
哪怕你想缩放 2 倍,也得写成 "2.0",不能写 "2" 或 2。XML 解析器对 float 类型很严格,整数字面量会导致解析失败,动画直接不执行,log 里可能只报 NumberFormatException,不提动画的事。
- 正确写法:
fromXScale="0.1"、toXScale="1.0" - 错误写法:
fromXScale="0"(整数)、fromXScale="0."(语法不全)、fromXScale=".1"(部分 ROM 不认) - 建议统一用带前导零和一位小数的格式,比如
"0.0"、"1.0",兼容性最稳
scaleX 动画和 pivotX 的关系经常被忽略
scaleX 缩放始终围绕 pivotX(默认是 View 左上角 x 坐标),不是中心。如果你没显式设 pivotX,缩放看起来就像“往左挤”或“往右拉”,而不是居中展开。
- 想实现居中放大:必须同时设
pivotX="50%"(相对自身宽)或pivotX="100dp"(绝对像素) - 常见坑:在
ScaleAnimationXML 里漏掉pivotX,结果动画偏移,UI 对不上设计稿 - 注意:pivotX 的单位是 dp 或百分比字符串(如
"50%"),不能写50%(少引号)或"50"(没单位)
用 ViewPropertyAnimator 替代 XML 更可控
XML 的 ScaleAnimation 是 legacy 方案,无法动态调整起始值,也不能和其它属性动画组合。真要精确控制 fromXScale,代码里调用 animate().scaleX(0.1f).scaleX(1.0f) 更直接,还能链式加 delay、setDuration、withEndAction。
- XML 动画一旦 start(),参数就锁死了;而代码里可以基于当前状态算
fromXScale,比如根据 visibility 切换不同起始值 - 如果必须用 XML,记得在
res/anim/下定义,并用AnimationUtils.loadAnimation()加载,别直接 new Animation - 性能提示:频繁触发 scale 动画时,避免在
onDraw()里反复读取getScaleX(),它会触发 layout request
fromXScale 设多少,得看你要遮罩还是入场、是否需要点击穿透、目标 Android 版本有没有 pivot 支持——不是套个 0.01 就万事大吉。










