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

使用Splash Screen Compat库遇图标裁剪,求解析288dp尺寸要求

问题分析与解决方案

你的启动图标裁剪问题,核心是没搞懂288dp安全区域的适配逻辑,以及viewport尺寸和绘制内容的对应关系:

1. 288dp的实际含义

官方说的288dp不是要在XML里直接配置的参数,而是要求你的图标实际可见内容必须限制在432dp画布的中间2/3区域(432×2/3=288)。系统会自动裁剪超出这个区域的内容,这就是你看到裁剪的原因。

2. 你的配置问题所在

你设置了android:viewportWidth="192"和android:viewportHeight="192",这相当于把432dp的物理画布,映射到192单位的虚拟坐标空间。如果你的图标绘制内容占满了192的viewport,对应到物理画布就是占满432dp,完全超出了288dp的安全区域,自然会被裁剪。

而官方示例用viewportWidth="432",是让虚拟坐标和物理画布尺寸一一对应,这样只要把图标内容限制在中间288dp的坐标范围(比如x从72到360,y从72到360,因为432-288=144,两边各留72dp空白),就不会触发裁剪。

3. 两种解决方法

方法一:对齐官方的viewport配置

把viewport改成432,然后调整图标绘制内容到中间288dp区域:

<vector
    android:width="432dp"
    android:height="432dp"
    android:viewportWidth="432"
    android:viewportHeight="432">
    <!-- 确保path的所有坐标都在x:72~360、y:72~360范围内 -->
    <path ... />
</vector>

方法二:保留192的viewport,调整绘制范围

因为192的viewport对应432dp画布,288dp对应的虚拟坐标是192*(288/432)=128。所以你需要把图标内容限制在虚拟坐标的中间128单位区域,两边各留32单位空白:

<vector
    android:name="vector"
    android:width="432dp"
    android:height="432dp"
    android:viewportWidth="192"
    android:viewportHeight="192">
    <!-- 把path平移到x:32~160、y:32~160范围内,或者缩小到128的尺寸居中绘制 -->
    <path ... />
</vector>

修改后在Android 12模拟器上测试,图标应该就不会被裁剪了,同时能保留原有动画效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:40:34