使用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
相关产品推荐
相关产品推荐

