android:pivotx/pivoty仅对有效,需配合显式width/height使用,且不影响view层rotation动画;xml中设pivot只作用于group的android:rotation属性。

vector group pivot 属性不起作用?先确认是否在 标签里用对了位置
Android 的 android:pivotX 和 android:pivotY 只能作用于 <group></group>,不能写在 <vector></vector> 或 <path></path> 上。常见错误是把 pivot 直接塞进 vector 根标签,结果旋转中心完全没变。
-
android:pivotX/android:pivotY必须作为<group></group>的属性出现 - 值支持像素(如
24)、dp(如24dp)、百分比(如50%),但注意:百分比是相对于当前<group></group>的宽高,不是整个 vector - 如果
<group></group>没显式设android:translateX/android:translateY,pivot 坐标默认以 group 左上角为原点(0, 0)
为什么设置了 pivot 却还是绕左上角转?检查 group 的 bounds 是否被 path 拉偏
vector 的实际绘制区域由内部所有 <path></path> 的边界共同决定,而 <group></group> 默认宽高是 0×0 —— 它不会自动“包住”子 path。如果你没给 <group></group> 显式设 android:width 和 android:height,pivot 坐标就失去参照系,系统会退回到默认行为(绕左上角)。
- 务必为
<group></group>设置明确的android:width和android:height,比如和 vector 的android:viewportWidth/android:viewportHeight一致 - 更稳妥的做法:把 pivot 设为
50%+50%,再配合android:pivotX和android:pivotY确保居中旋转 - 示例:
<group android:width="24dp" android:height="24dp" android:pivotx="12dp" android:pivoty="12dp"><path android:pathdata="..."></path></group>
rotate 动画或代码里调用 setRotation() 时 pivot 不生效?那是 runtime 行为,XML pivot 不参与
XML 中的 android:pivotX / android:pivotY 只影响 <group></group> 自身的 android:rotation 属性(静态旋转),它和 View 层级的 setRotation()、ObjectAnimator.ofFloat(view, "rotation", ...) 完全无关。后者走的是 View 的 pivot 逻辑,受 setPivotX()/setPivotY() 控制。
- XML 里的 pivot 对
android:rotation有效,对 Java/Kotlin 里操作 View 的 rotation 无效 - 想让动画绕指定点转,必须在代码中调用
imageView.setPivotX(12f)和imageView.setPivotY(12f),且要在setRotation()之前执行 - 如果 vector 是通过
app:srcCompat设置的,记得用ImageView而非View,否则 pivot 设置可能被忽略
不同 Android 版本下 pivot 解析差异:避免用小数 dp 值
低于 API 24 的系统对 android:pivotX 的小数解析不一致,比如 12.5dp 在某些机型上会被截断成 12dp,导致旋转偏移。这不是 bug,是旧版 VectorDrawable 渲染引擎的精度限制。
- 优先使用整数像素或整数 dp 值,如
12dp、24,避免12.5dp、0.5 - 若必须居中且 viewport 是奇数(如
23),改用50%更可靠,因为百分比计算在各版本中一致性更高 - 测试时至少覆盖 API 21(Lollipop)和 API 28(Pie),这两个版本 pivot 行为差异最明显










