点九图,是 Android 开发中用到的一种特殊格式的图片,文件名以”.9.png“命名。这种图片能告诉开发,图像哪一部分可以被拉伸,哪一部分不能被拉伸需要保持原有比列。运用点九图可以保证图片在不模糊变形的前提下做到自适应。点九图常用于对话框和聊天气泡背景图片中。
制作点九图有四个硬性要求,只要满足这四点,点九图就可以被正确识别。
要求一:
名称格式必须为:文件名称 .9.png。
要求二:
上下左右各留有 1px 的标识线区,此区内不能有半透明像素(特别注意:切图若有投影,不要泄漏到标识线区)。
要求三:
伸缩标识线与内间距标识线为不透明的纯黑色(#000000),光学标识线为不透明的纯红色(#ff0000)。
要求四:
点九图的特殊结构会导致其4个顶角处成为“绝对禁区”,这4个1像素×1像素的区域内不能有任何内容。
伸缩线详解
伸缩线标注了切图内的拉伸区域/收缩区域。一般来说点九图越小越好,因此通常切图尺寸都要小于控件尺寸,但这并不意味着不会出现切图尺寸大于控件尺寸的情况,在这种情况下,切图会根据伸缩线来进行缩小。
从实验的结果得到三个结论:
1.切图拉伸时,仅伸缩区会被拉伸。
2.切图收缩时,首先伸缩区会被收缩。
3.当伸缩区缩小到0之后,切图整体继续收缩(Android 4.3之前表现不同,谷歌公布的Android系统9月份的月度版本分布图数据显示4.3之前的机型占比不足7%,所以可忽略此情况)。
每个区域的拉伸/放缩长度与本区的伸缩标识线长度成正比。
内间距线详解
内间距线所标注的是控件的内间距,而不是点九图的内间距,所以,内间距线跟点九图本身并没有直接的联系。
1.横向内间距线的左端到切图左端的距离为控件的左侧内间距值;
2.横向内间距线的右端到切图右端的距离为控件的右侧内间距值。
例如,对话框是圆角,文字需要被包裹在其内,如果纵向显示内容区域顶到两遍,显示的效果会是如下图。
虽然内间距线也可以画为多段,但是系统只关心最左端和最右端的位置,所以多段内间距线是没有任何意义的。
点九图中的内间距线,仅在代码中没有指定Padding属性的时候才会生效,但这不代表可以忽略点九图中的内间距线。我建议没有特殊要求, 点9图都带上内边距线, 避免写padding具体的数值.
视觉边界布局(Optical bounds layout)
是在Android 4.3(Api level 18)中引入的一种新的布局对齐方式。
光学边界也叫做视觉边界,下图是一个带有投影的蓝色按钮切图。在视觉上,此图形的外轮廓是蓝色按钮所占区域,而不是切图实际所占区域。光学边界线标注的位置为投影的位置,表示此区域在视觉上不可察觉。
对于那些有透明空白边的控件来说,使用视觉边界布局在显示效果上更加整齐。 不然的话,要保证每个控件的空白透明边都是一样的才能保证内容对齐。
边界对齐了
注意:
- 最外边的 1px 线段必须是纯黑色(#000000),一点点的半透明的像素都不可以有,比如说99%的黑色或者是1%的投影都不可以有。(这1PX 像素在程序最终输出的效果中不会被显示),光学标识线为不透明的纯红色(#ff0000)。
- 文件的后缀名必须是 .9.png,不能是 .png 或者是 .9.png.png,这样的命名都会导致编译失败。
- 点九图的特殊结构会导致其4个顶角处成为“绝对禁区”,这 4个 1像素×1 像素的区域内不能有任何内容。
- 站在安卓开发的角度, 如果是纯色背景建议放在
drawable-nodpi
下, 如果是非纯色, 例如有边框, 按照行业标准一套图, 图简便放在drawable-xxhdpi
下, 在加载背景的时候系统会进行缩放, 如果有条件多套图就多套图。
.9图其他说明
.9图放置在不同 dpi 文件夹下的效果
注: 若.9图可以设置为本身不透明,看实际需要了。例如以下就没有设置为透明。
.9图放到 ldpi 的效果
和 xxdpi 的效果
参考
点九切图你知道怎么切吗?-UI 中国-专业用户体验设计平台
https://www.ui.cn/detail/285877.html
点九图完全解析<附官方工具>-UI 中国-专业用户体验设计平台
https://www.ui.cn/detail/290941.html