一张带黑线的图,决定了一个圆角按钮能不能任意变宽
换图的时候,有一种情况特别让人费解:你换了一张看起来一模一样的图,装上去之后,按钮的圆角变成了尖角,边框被拉得粗细不一,中间那块图案被扯变形。你确认自己换的是同一张、同样的尺寸、同样的格式——问题却出现了。
原因通常只有一个:你换掉的那张图,本来是"九图"(9-patch),换上去的那张是普通图。九图是一种"能被拉伸而不变形"的特殊图片,它在文件里藏了几条几乎看不见的黑线,告诉系统"哪里可以拉、哪里不能拉"。你把它换成普通图,这些信息就没了。
这篇文章讲三件事:九图的原理、那几条黑线各管什么、以及换了之后花了怎么救。它属于"知道一次,以后一辈子不踩"的那类知识——因为九图本身不难,难的是"你不知道它是九图"。
只需说话,就能让应用变成你想要的样子。而在「安卓修改大师智改工坊」里换图时,如果原图是九图,工具会按九图的方式处理,而不是简单地"换一张图上去"。想对照着看一眼九图长什么样,可以从 https://www.apkeditor.cn/ai-version.aspx 下载「安卓修改大师智改工坊」,在反编译出来的 res 里搜一下结尾带 .9 的图片文件。
一、九图到底在解决什么问题
先说清楚"为什么需要九图"。手机屏幕的尺寸千差万别,同一个按钮,在小屏上可能只有 80 像素宽,在大屏上要 200 像素。如果按钮背景是一张普通图片,系统只能整张拉伸——四个圆角被拉成椭圆,边框被拉粗,中间的纹理被扯开。
九图的核心思路是"分区":把一张图切成九块,四个角保持原样不拉伸,四条边只朝一个方向拉伸,中间那块朝两个方向拉伸。这样无论按钮变多宽多高,圆角永远是圆的,边框永远是细的。
这个"九块"的划分方式,就写在图片的边缘上。具体做法是在图片的最外圈画黑线:上边画一段,表示"这一列可以横向拉";左边画一段,表示"这一行可以纵向拉";下边和右边画的线,表示"内容允许放在哪个范围内"。
所以一张九图,看起来和普通图片几乎一样,只是边缘多了一两像素的黑线。而这几条线在正常显示时是被裁掉的,用户永远看不到——它只对系统有意义。
这也是"换了九图却看不出区别"的原因:你在看图软件里看到的那张图,和系统实际用的那张,边缘处理是不一样的。看图软件显示整张图(含黑线),系统显示裁掉黑线之后、按九块拉伸的结果。
理解这一点之后,一个常见的困惑就解开了:为什么"同样的图、同样的尺寸",换上去效果不同。因为决定效果的不是图的内容,是那几条线的位置。线没了,系统就当成一张普通的整图来拉伸。
顺带说一句文件命名:九图的文件名通常以 .9.png 结尾,比如 button_bg.9.png。这个 .9 不是装饰,它告诉打包工具"这张图要按九图处理"。你把文件改名成 button_bg.png,它就变成了普通图——内容一样,行为完全不同。
二、四条黑线,各管一件事
九图边缘的黑线,一共可以画四条,各管一件事。记住这四条的分工,你就能看懂任何一张九图。
上边那条:横向拉伸区。它标出"哪一列可以被横向拉长"。通常画在中间偏左的位置,长度就是你希望"随宽度变化"的那一段。上边不画线,整张图就按原样横向铺,不会拉伸。
左边那条:纵向拉伸区。同理,标出"哪一行可以被纵向拉高"。上下两条边往往一起用:上边管横向、左边管纵向,中间那块就是"两个方向都能拉"的区域。
下边那条:内容区的横向范围。它告诉系统"文字或图标允许放在哪个横向区间里"。这条线的作用是保护——比如圆角按钮,文字不应该压到圆角上,下边那条线就把可用范围往里收了一点。
右边那条:内容区的纵向范围。同理,控制文字的上下边界。两条内容线合起来,就是"内容的安全区"。
四条线的组合,决定了一件很实际的事:文字离边框有多远。很多人发现"按钮上的字贴着边",改字号、改间距都没用——真正的原因是九图里的内容线画得太靠外,文字被允许顶到边上。
而"线画在哪"这件事,只在图片里,不在代码里、也不在布局文件里。所以这类"文字贴边"的问题,只能从图这一层解决——这也是它容易被忽略的原因:你一直在改布局,问题却在图里。
三、九图花掉的三种样子,和三个原因
圆角变尖、边框粗细不一、图案被扯开
九图花掉的样子,比"闪退"温和得多,但更难查。常见的有三种,每种对应一个具体原因。
第一种:圆角变尖角。按钮的四个角本来是圆的,改完变成直角,或者被拉成了椭圆。原因是九图退化成了普通图——线没了、或者文件名里的 .9 没了。系统只能整张拉伸,圆角自然被拉变形。
第二种:边框粗细不一。左边框细、右边框粗,或者上边细、下边粗。原因是"拉伸区"画错了:本该只拉中间那一小段的,结果把边框也划进了拉伸区,于是边框跟着一起被拉粗。
第三种:中间图案被扯开。图标、纹理、渐变被拉得模糊或者重复。原因和第二种类似:把"不该拉伸的图案区"划进了拉伸区。
三种情况的共同点是:图本身是"对"的,错在"怎么被使用"。所以你在看图软件里怎么看都看不出问题——因为问题不在像素,在边缘那几条线。
判断方法很简单:把这张图放大到能看见最外圈那一像素,看有没有黑线。有,说明它是九图;没有,说明它是普通图。再看文件名有没有 .9——两个都对上,才说明它"还是九图"。
还有一个更快的判断:如果这个图在应用里"能跟着按钮变宽"(比如对话框背景、气泡背景),那它十有八九是九图。因为普通图做不到这一点——普通图要么被拉伸变形,要么固定尺寸留白。
我们自家的门店会员端,有一个"积分卡片",是一张带圆角、带一条细边框的白底卡片,高度固定、宽度随屏幕变。这张卡片背后就是一张九图。
以前怎么做:品牌方换了配色,要把这条细边框从浅灰改成品牌蓝。我当时找了一张新做的卡片背景图,尺寸一样、颜色对了,替换进去,打包装上——卡片变成了直角,边框粗细不均,右边的竖边框几乎看不见。
问题在哪:原来的那张是九图,四条黑线画在边缘;我换上去的那张是普通图,没有线。系统于是把它当成整张图,按卡片尺寸拉伸,四个圆角被拉成了直角,边框被横向拉长。
现在一句话怎么做:说"把会员卡片的背景图换成这张,还是按九图的方式,圆角保持原样"。「安卓修改大师智改工坊」按九图处理这张新图:把它放进原有的九图结构里拉伸,而不是当普通图整张铺。
改完怎么验证:三看。看四个角还是不是圆的(放大看);看左右两条竖边框粗细是否一致;看卡片的宽度变化时(换个屏幕看),边框有没有跟着变粗。三处都对,才算真的换对了。
这次之后我们定了一条规矩:换任何背景图之前,先看一眼文件名里有没有 .9。有 .9,就必须按九图换;没有,才按普通图换。这个动作两秒钟,省下的是一轮排查。
顺便说一句"为什么它这么容易被忽略":因为九图在大多数看图软件里显示出来的样子,和你想要的"新图"几乎一样。你看着觉得"这不就是同一张吗",而系统看到的是"一个能拉伸的框"和"一张会被拉坏的图"——两边的理解完全不同。
第二个例子是自家的设备巡检端,里面有一排"评分按钮",圆角胶囊形,选中时变成深色。这排按钮的背景也是九图,因为按钮宽度跟着文字长度变。
以前怎么做:有人反馈"字离边框太近了,看着挤"。我把按钮的内边距调大了两次,字是挪进去了一点,但右边总差一点,怎么调都不均匀。后来才想到去看那张背景图。
问题在哪:那张九图的"内容线"画得太靠外——它允许文字一直排到离边框两像素的地方。所以你在布局里怎么加边距,都被这张图的"可用范围"限制住了:边距加大到一定程度,文字就会被裁。
现在一句话怎么做:说"把评分按钮的背景图内容区往里收一点,左右各留出足够的边距,圆角和颜色不变"。「安卓修改大师智改工坊」会按九图的规则重画内容线,而不是简单地裁小图片。
改完怎么验证:看最短的那个按钮(两个字)和最长那个(六个字),两者的左右留白是不是看起来一样宽;再把系统字体调大一号,看字会不会顶到圆角上。第二项最容易漏,因为字体一大,内容区就不够用了。
这个实例想说明的是:有些"布局问题",根子不在布局。你改了布局的边距、改了文字大小,都没解决,因为限制你的是那张图里的内容线。而"去图里改"这个方向,往往要想很久才想到。
而这也解释了为什么"文字贴边"在某些应用里怎么都改不好:不是改的人不细心,是改的层次不对——图和布局是两层,边距被图限制住的时候,布局怎么调都是白调。
五、换图、改线、改颜色:三条路的成本差十倍
知道了原理,接下来是"怎么做才对"。九图的修改有两个动作:换图、改线。两者要分开看。
换图(内容变了,结构不变):新图和原图尺寸、圆角、边框粗细都一致,只是颜色或纹理不同。这种最省事——把新图按九图的规则处理,线沿用原来的位置。
改线(结构变了):比如圆角要变大、边框要变粗、内容区要往里收。这种不能只换图,得重画那几条线。而重画的方式,不是"在图片上手画像素",是用支持九图的工具去标。
为什么不建议手画像素?因为那几条线只有一像素宽,位置差一个像素,拉伸结果就不同。而手画的线很难保证"只在这一条边上"、"长度刚好覆盖要拉的那一段"。用工具标,你能看到"拉伸预览",立刻知道对不对。
还有一个更省事的判断:如果这个改动"只是颜色",那根本不需要碰九图。很多背景图的颜色其实是由"着色"属性控制的,你改颜色值就行,图本身不用动。这样既不会破坏九图,也不会引入新的问题。
而如果这个改动"只是圆角大小",那要看它是不是用"形状"画出来的。有些应用的圆角背景不是图片,是用代码画的形状(一个矩形加圆角半径)。这种情况改的是那个半径值,跟图片无关——找错方向会白折腾。
三个方向——换图、改线、改颜色或半径——对应三种成本:十分钟、半小时、两分钟。而判断该走哪条路的方法,是先看这个背景"是图还是形状",再看"图是不是九图"。两次判断,决定后面所有动作。
六、五个最常被问到的问题
问题一:我怎么知道一张图是不是九图?
两个信号一起看:文件名带 .9,且边缘有黑线。只满足一个都不算——文件名带 .9 但边缘没线,打包时会报错;边缘有线但文件名没有 .9,打包工具不会按九图处理。
问题二:能不能把九图换成普通图,也能正常显示?
能,但会有代价。如果这个图在界面上是"固定尺寸"(比如一个固定大小的图标),换成普通图没问题;如果它会随内容变宽变高(按钮、对话框、气泡),换成普通图就会变形。判断标准是"它会不会被拉伸"。
问题三:我换的图尺寸和原来不一样,行不行?
行,但线的位置要跟着重画。因为线是画在"距边缘多少像素"的位置上,尺寸一变,原来的比例就错了。稳妥的做法是"新图按原图的尺寸做",这样线可以直接沿用。
问题四:九图花了,最快的救法是什么?
换回原来那张图,先让界面恢复正常,再慢慢研究新的怎么做。因为九图花了不影响功能,只影响观感,所以"先恢复、再优化"完全可行。而"在现场一边等一边试",往往会越试越乱。
问题五:为什么同一个九图,在不同机器上花得不一样?
因为拉伸的比例不同。屏幕窄的地方拉伸得少,边框几乎不变;屏幕宽的地方拉伸得多,如果拉伸区画错了,边框就被拉得特别粗。所以"我这台看着还行"不能作为验收结论——必须在大屏上也看一眼。
上左管拉伸,下右管内容
七、三种情况,其实不该用九图
不是所有图都该做成九图。过度使用会让维护变复杂,而下面三种情况,用普通图反而更合适。
第一种:固定尺寸的图标。比如一个 48×48 的返回箭头、一个固定大小的头像框。它永远不变大变小,拉伸信息毫无意义。做成九图只是增加了一层无用的复杂度。
第二种:会整体缩放的插画。比如启动页的大图、活动页的插画。这类图的正确做法是"按比例缩放",而不是"分块拉伸"——因为它的内容是连贯的,任何分块都会破坏画面。
第三种:有明确纹理或渐变的背景。九图会把中间那块重复拉伸,而有纹理的图一拉就会"糊"或者出现"条带"。这类图更适合"平铺"或者"按比例铺满",而不是九图。
这三种之外,还有一类"看起来像需要九图、其实用代码画更好"的:简单的纯色圆角矩形。一张纯色圆角背景,用形状画出来只有几行属性,而做一张九图要准备五套密度、还要画线。改颜色的时候,前者改一个值,后者要重新出图。
判断"该不该做九图",其实就一个问题:它会不会在不同场合被拉成不同尺寸,而且拉伸时某些部分必须保持原样?会,就用九图;不会,就别用。
而这个问题反过来也很有用:当你看到一张图"被拉花了",先问"它本来该不该被拉伸"。如果本来就不该,那正确做法可能是"改布局让它不被拉伸",而不是"把它改成九图"。
长短两个并排看,问题才露头
八、九图改完的三步验收
九图改完的验收,和普通图完全不同。普通图看"对不对",九图要看"被拉伸之后对不对"。而拉伸只有在特定尺寸下才发生,所以验收必须换尺寸看。
第一步:在两种宽度下看。找一个内容很短的按钮、一个内容很长的按钮,并排看。如果两者的圆角形状、边框粗细看起来"一样",说明拉伸区画对了;如果一个圆一个偏,说明拉伸区把圆角划进去了。
第二步:看四个角。把图放大到能看清像素,看四个角是不是完整的圆弧。如果某个角变尖、变模糊、或者缺一块,说明角被划进了拉伸区,或者图片尺寸被裁过。
第三步:看内容。文字有没有贴边、有没有被裁、上下留白是否均匀。这一项和"内容线"直接相关,也是"字挤在边上"这类问题的唯一解法。
三步之外还有一个附加动作:把系统字体调大一号再看一遍。因为内容区是固定的,字变大之后会溢出——而溢出在默认字号下完全看不出来。
验收的顺序建议是"先长后短":先看最长的那个,再看最短的。因为最长的那个最能暴露拉伸问题,而最短的那个最容易暴露内容区问题——两个都看完,才算完整。
最后一条:验收时把"改动前后的截图"并排放。九图的问题很微妙,单看"现在这张"你会觉得"好像没问题",而并排看,圆角弧度、边框粗细的差别会立刻显出来。
| 用途 |
该不该九图 |
改的时候注意 |
| 按钮 / 对话框 / 气泡背景 |
该用 |
线的位置要避开圆角和边框 |
| 卡片 / 列表项背景 |
多数该用 |
高度固定时可省纵向那条线 |
| 图标 / 头像 / 插画 / 启动图 |
不该用 |
按比例缩放,别分块 |
| 分隔线 / 进度条 |
不用图 |
用形状画,还能跟主题换色 |
| 纹理 / 渐变背景 |
不该用 |
拉中间那块会糊,改用平铺 |
九、一张对照表:哪些图该是九图
把这篇的内容压成一张表,改图之前对一眼就够。表里三列:这张图的用途、该不该九图、改的时候注意什么。
按钮背景、对话框背景、气泡背景:该用九图。改的时候要保证"圆角和边框不被拉伸",也就是说线的位置必须避开它们。
卡片背景、列表项背景:看情况。如果卡片会随内容变高,属于该用九图;如果高度固定、只有宽度变,也要九图(只是纵向那条线可以省)。
图标、头像、插画、启动图:不该用九图。它们是"整体缩放"或"固定尺寸",做成九图只会更麻烦。
分隔线、进度条:通常用代码画,不用图。因为它们是纯色,代码画更清晰、体积更小、还能跟着主题换色。
表面纹理、渐变背景:不该用九图。九图会把中间那块重复拉,纹理一拉就糊。这类更适合平铺或按比例缩放。
表里最有价值的一行,是"分隔线和进度条"那一行。因为它提醒你:很多看起来需要图的东西,其实代码两行就能画——而"用图"这个选择本身,就是后面所有麻烦的来源。
十、三个动作,写在便签上就够
这篇讲的东西,最后可以压缩成三个动作,写在便签上就够。而它们之所以值得背下来,是因为九图的问题"一旦发生就来不及查"——你手上只有一台装着坏包的机器,没有时间从头学。
动作一:换背景图之前,看文件名有没有 .9。有,就按九图换;没有,就按普通图换。这一个动作能挡住八成的"换完花掉"。
动作二:换完之后,在"最长"和"最短"两种内容下各看一眼。因为拉伸问题只在尺寸差得远的时候才明显,而在"刚刚好"的尺寸下,坏图看起来和好图一模一样。
动作三:字贴边的时候,先怀疑图里的内容线,再怀疑布局的边距。因为边距被内容线限制住的时候,你怎么加边距都没用——而"图里还有线"这件事,很容易被忘掉。
三个动作之外,还有一个"心理动作"值得一提:看到"图看着一样、效果不一样",第一反应应该是"它可能不是同一个类型"。而不是"我是不是没改对"。因为这一类问题,本质上是"同一张图在不同规则下被使用",而不是"改错了"。
而"类型"这件事,在改包里还有很多类似的情况:同一句话在字符串资源和布局里各有一份、同一张图在不同密度目录里各有一份、同一个界面在不同限定符目录里各有一份。它们的共同点是"看起来是同一个东西,实际上是多个副本"——而"数清副本",是所有改包动作的第一步。
所以这篇文章虽然讲的是九图,但它练的是一种通用的判断力:先分类型,再动手。分对了,改一次就成;分错了,改十次也还是花。
十一、九图也有密度:一张图其实是一组图
九图和多密度这两件事,是叠在一起的,而很多人只记住了其中一件。你知道图标要备五个密度,也知道背景图要画九条线,但很少有人意识到:一张九图,按道理也要按密度各备一份。
原因很直接:九图的边缘线条宽度是按"像素"画的,而屏幕密度不同,同样的像素数看起来粗细不同。低密度屏上一条 2 像素的边框,看起来像是"正常的一根线";到了高密度屏上,同样 2 像素就细得像没画。所以适配得好的应用,每个密度目录里都会有一份对应尺寸的九图。
而实际情况是:很多应用只放了一份,放在最高的那个密度目录里,让系统自己去缩。这种做法在多数场景下能看,但边框会偏细、圆角会偏小,肉眼一对比就能看出"有点飘"。这也是为什么同样的设计稿,在不同应用里做出来的"精致感"不一样。
所以你换一张九图的时候,首先要回答的问题是:这个应用里,这张图有几个副本?如果只有一份,你换的那一份就是全部;如果有五份,你得保证五份都换了,或者至少保证"系统取的那一份"是新的。而判断"取哪一份",和前面讲图标是同一个逻辑——按屏幕密度取最接近的那份。
这里有一个很实际的经验:如果只换一份,那就换最高密度那份。因为系统在找不到完全匹配的密度时,会优先取"更高的那份往下缩",而不是"低的那份往上放"。缩小的效果比放大的效果可控——放大容易出现毛边,缩小只是略微模糊。
但"缩小"也有代价:边框会变细、圆角会变小。所以如果你换的新图"边框比原来粗一点",那缩下来可能刚好;如果新图"边框和原来一样",缩下来就会偏细。这类细微差别,只有把两台不同密度的机器并排看,才看得出来。
还有一个反过来的坑:有些应用为了省体积,把九图只放在一个目录里,然后在打包时开了"资源压缩"。压缩之后图可能被重新编码,边缘的一像素线条被"抹掉"——于是九图退化成了普通图。表现就是"我什么都没改,怎么就花了"。这种情况在排查时最容易被忽略,因为你的改动清单里确实没有它。
判断是不是这种情况,最快的办法是"反编译回来看看"。把出问题的包装的那个图取出来,放大看边缘还有没有黑线。如果没有,说明它在打包环节被处理掉了;如果有,说明问题出在别处。这一步只需要两分钟,却能省掉一整轮"猜"。
把这一节压缩成一句话:九图不只是"一张图",它是"一组按密度分布的图"。换的时候心里要有"组"这个概念,而不是"一张"。而"组"这个概念,恰好也是改包这件事里最常被忽略的一层——图、文案、布局、清单,几乎每一样都是"一组"。
十二、改完图,包大了十几兆是怎么回事
改完九图之后,有一类反馈特别常见:"界面好像变好看了,但包大了十几兆。"而这类"变大",往往和九图有关。
最常见的原因是"新图没压缩"。设计给的源文件通常是高清 png,一张背景图可能有两三兆;而应用里原本那张,是压缩过、裁到刚好尺寸的小图。你直接把源文件塞进去,包自然就大了。而它带来的另一个后果是:某些系统在加载大图时会明显变慢,表现出来的就是"打开这个页面卡一下"。
第二个原因是"多放了几份"。本来只有一份九图,你为了保险,五个密度各放了一份高清图——包里就多了四份。而系统实际只用其中一份,其余四份纯粹是体积。
第三个原因是"格式没选对"。同样一张带渐变的背景,用 png 可能有几百 K,用 webp 可能只有几十 K。而很多应用本来就支持 webp——你换成 png,等于白白把体积放大几倍。
这三个原因有一个共同的检查方法:改完对比包体积,如果涨得超过预期,就去 res 里按文件大小排一下序。排在最前面的那几个,通常就是"新塞进去的大图"。这个方法不用任何工具,看一眼目录就知道。
而"包变大"这件事要不要管,取决于分发方式。如果是内部几十台设备用 U 盘装,大几兆无所谓;如果是让门店自己扫码下载,多十兆就意味着"有人会放弃下载"。所以"体积"这件事的重要性,是由分发方式决定的,不是由技术洁癖决定的。
顺便说一个反过来的情况:改完之后包反而小了,也要留个心。如果小了十几兆,可能是某几组资源没被打进去——尤其是你刚动过资源目录的时候。验证方法很简单:把主要页面走一遍,看有没有"图变成空白"或者"图标变成方块"。
而如果只是小了几百 K,那多半是压缩率的正常波动,不用管。重新打包时,同样的资源可能被压得更好一点,也可能差一点。判断"正常波动"和"真出问题"的分界线,是"界面有没有缺东西",而不是"数字变了多少"。
把这一节压成一句:改图之后,体积要看一眼,但不必当成硬指标。真正要盯的是"有没有缺资源"和"加载有没有变慢",而这两个都能通过"走一遍界面"发现——比盯数字可靠。
十三、很多"换图",其实只需要换个颜色
很多"换图"的需求,其实要的只是"换个颜色"。而这两件事的成本差得很远:换颜色改一个值就行,换图要重新出图、重新画线、重新压实。
为什么会混?因为需求方说的是"把这个按钮换成绿色"。他关心的是"看起来绿",而不是"底层是换了图还是加了着色"。而你如果按字面意思去换图,就会把一张本来好好的九图换成一张新的,然后遇到圆角、边框、密度这一串问题。
正确的做法是先确认:这个背景的颜色,是由图决定的,还是由着色属性决定的。如果是后者,改一个颜色值就够了,图完全不用动;如果是前者(图本身是彩色的、有渐变或纹理),那才需要换图。
怎么判断?看这个背景在"不同状态下"的表现。如果按钮"按下时变深、禁用时变灰",而图只有一张,那多半是着色在起作用——否则它得准备三四张图。而"一张图配多种状态"这种设计,几乎都是着色实现的。
着色的另一个好处是"跟着主题走"。如果应用支持换主题色,那些用着色实现的元素会自动跟着变;而用图片实现的元素,主题一换就"只有它是旧颜色"。这也是为什么规范的界面里,纯色元素尽量用形状加着色,而不是用图。
而着色的代价是"表达能力有限"。它只能整体染色,做不出渐变、阴影、纹理这些效果。所以"要不要用图"这个选择,本质上是"这个视觉复杂度,值不值得承担一张图的维护成本"。
实践中有一条很好用的分界:如果这个元素"只有一种颜色、外加圆角和边框",就用形状;如果它有渐变、有阴影、有多层描边,就用图(九图)。按这条分,日常界面里八成的背景都不需要图。
而当你接手一个"图很多"的应用时,这条分界也能帮你判断"哪些图是可以删的"。那些纯色、圆角、单层边框的图,理论上都能用形状替代——但替代是代码层的改动,不是改包能做的。所以这条更多是"理解",不是"操作"。
十四、把这件事教给别人,三句话就够
如果你要把这套东西教给别人,三句话就够。而这三句话之所以有效,是因为它们对应三个最容易出错的判断点,而不是三条知识点。
第一句:先看文件名有没有 .9。这句话教的是"分类"——在动手之前先判断"它是哪种东西"。而"先分类再动手"这个习惯,比任何具体的九图知识都值钱,因为它能迁移到图标、文案、布局上。
第二句:换完在长短两种尺寸下各看一眼。这句话教的是"验证方式"——不是"看对不对",而是"在会出问题的条件下看"。因为九图的错只在拉伸时暴露,而"刚刚好"的尺寸永远看不出问题。
第三句:字贴边的时候,先看图再看布局。这句话教的是"排查顺序"——从限制更强的那一层开始找。因为内容线是硬的,布局边距是软的,软的怎么调都越不过硬的。
三句话之外,还有一个"不要做"的提醒:不要在手画的图上改线。因为线只有一像素,位置差一点,结果就差很多;而手画没有预览,你只能靠"打完包装上试"来验证,一轮下来十几分钟。用工具标线,能立刻看到拉伸效果。
教别人的时候,最有效的方式不是讲原理,是"当场做一次"。拿一张真的九图,换一次、花一次、再改回来。看着它从"圆角"变成"尖角",再变回"圆角",这个印象比读三篇文章都深。而这件事只需要五分钟。
而如果他手上没有合适的例子,那就用"最普通的按钮"。几乎每个应用都有圆角按钮,几乎每个圆角按钮背后都有一张九图——它是一个极好的教具,因为它天天被看见,却从没被注意过。
最后一句提醒,是关于"心态"的:九图这类问题,第一次遇到会觉得"莫名其妙",第二次遇到就会觉得"又是它"。而"又是它"这三个字,就是经验真正长在身上的标志。它不需要你记住所有细节,只需要你记住"有这么一类东西"。
十五、另外两种也会"拉花"的图
除了九图,还有两种图也会"越改越花",而它们经常被混在一起说。认识它们的差别,才能一次改对。
第一种:自适应图标的前景和背景。新系统会把图标裁成不同形状,所以图标被拆成两层:背景铺满、前景居中。你如果只换了一张"整体图",在某些系统上会被裁掉一圈;而如果你把前景换成了带边缘元素的图,圆角裁剪时就会切到主体。
第二种:位图的缩放方式。同一张图放在不同尺寸的容器里,可以是"拉伸填满"、"等比缩放"、"居中裁剪"。这三种方式在代码里只是一行属性,在界面上的差别却是"人变形"和"两边留白"的区别。而它和九图无关——九图解决的是"分块拉伸",缩放方式解决的是"整体怎么放"。
两者的共同点是:问题都不在"图的内容",而在"图被怎么使用"。所以排查的时候,看像素是没用的,要看"它在界面上被放在什么容器里、用什么规则放"。
一个很实用的区分方法:如果问题是"某个局部变形"(圆角、边框、中间图案),往九图方向想;如果问题是"整体比例不对"(人变胖、图变扁、四周留白),往缩放方式方向想。这两类问题的解法完全不同,别混。
而"图标被裁"这一类,还要多看一层:不同系统的裁剪形状不一样。圆形、方形、圆角方形、水滴形,各家不同。所以"图标主体留在中间那块安全区"这条经验,比任何具体尺寸都管用。
把这一节压成一句:变形分两种,一种在"块"里,一种在"整体"上。分清了,你就能在两分钟内判断该动图、动线,还是动那一行显示属性。
十六、一次返工的全过程:二十分钟的活,一个下午的时间
把这篇的内容放回一次真实的返工里,会更清楚它为什么值得写成文章。那次返工一共花了一个下午,而真正的技术操作只有二十分钟。
事情的开始是一句反馈:"新皮肤的卡片看起来有点怪,说不上哪里。"于是我们先换回去,确认旧版是正常的——这一步花了五分钟,但它把"是不是新皮肤本身的问题"这个方向排掉了。
然后是对比。把新旧两张卡片背景图并排放大,看边缘。旧的那张边缘有黑线,新的那张没有。到这一步,其实已经知道原因了,但还需要确认"是不是只有这一张图有问题"。
接着是排查范围。把这次换掉的所有背景图列出来,一张张看文件名。一共七张,其中三张是九图、四张是普通图,而我们也确实只把三张九图换成了普通图——所以花掉的地方正好是三处,和反馈的"三处看着怪"对上了。
再往后才是真正的修复:把三张新图按九图的规则重新处理,线沿用原来的位置。这一步二十分钟,包括打包和装到两台机器上看。剩下的时间,全花在"确认别的地方没坏"上——走了一遍主要页面,看了三块屏。
这次返工最值得记住的,不是"九图不能换成普通图"这个结论,而是"我们是在第三步才知道范围"。如果一开始就知道"这次换了七张图,其中三张是九图",整件事会缩短到一个小时以内。
所以后来我们加了一条很简单的做法:每次换图,先在纸上或者聊天记录里列一张清单——换了哪几张、哪几张是九图。列清单花两分钟,而它把"事后排查"变成了"事前知道"。
而这条做法还有一个副作用:它让"换图"这件事变得可交接。清单在,别人接手的时候就知道动过什么;清单不在,半年后连你自己都要重新查一遍。
把这次返工压成一句:真正花时间的不是改,是"不知道改了哪些"。而九图只是其中一个具体的原因——换成图标、文案、布局,故事几乎一样。
十七、用过的人怎么说
"换了一张卡片背景,圆角全变尖了。我以为是自己图做错了,重新出了三遍图,一模一样。后来有人提醒我看文件名有没有 .9,我才知道那玩意儿叫九图。"
—— 小唐 · 一家连锁门店的运营专员
"我们有个按钮,字永远贴着边,改内边距改了三次都没用。后来才发现是那张背景图的内容线画得太靠外。改图五分钟,之前折腾了一下午。"
—— 阿哲 · 一家教育机构的教务技术员
"我一直以为换个颜色就得换图。有一次需求是'把这个按钮换成品牌绿',我换了图,结果圆角、边框全出问题。后来才知道那颜色本来就是染色染上去的,改一个值就行。"
—— 林姐 · 一家连锁品牌加盟运营负责人
"我现在换图之前会先列一张单子:这次换了几张、哪几张是九图。列单子两分钟,但它让我在出问题时知道'范围有多大',不用再从头查一遍。"
—— 郑工 · 一家工业设备公司的信息化主管
"最容易漏的是平板。手机上看着圆角正常,平板上一拉,边框粗细都不一样。现在我们换完图,一定拿平板再看一眼。"
—— 老麦 · 一家设备租赁公司的技术负责人
五条反馈,讲的是五件事:不知道有九图、字贴边其实是图的问题、换色不等于换图、清单能限定排查范围、平板会放大问题。而它们恰好对应这篇文章的五个小节——分类、内容线、着色、清单、尺寸。
第一条里那句"重新出了三遍图,一模一样",大概是最能代表这个领域的一句话。因为当你不知道"问题在规则层"的时候,你会在"内容层"反复尝试——而出三遍图、改五遍边距、换两次包,都不会有任何变化。而知道规则之后,改一次就够了。
合规提醒
本文讨论的所有改动,都应在自己拥有版权、或已获得权利人明确授权的应用上进行。请勿用于破解他人软件、绕过授权验证、去除版权标识或任何侵犯他人权益的用途。文中的门店会员端和巡检端,都是我们自家开发、授权给内部和合作门店使用的应用。关于图片素材还要多说一句:背景、图标、插画这些图,往往不是"技术文件"而是"别人的作品"。从网上下载一张图换进包里,技术上十秒钟,但它的授权范围可能只允许个人使用。改包改的是文件,用不用得了这张图,是另一回事。
安卓修改大师智改工坊
换图这件事,说清"换成哪张"就够了
反编译建项目 → 一句话描述 → 打包签名 → 长短两种尺寸验收
官网 www.apkeditor.cn
立即下载智改工坊(AI 版)
支持 apk / apks / xapk / apkm 等包型 · Windows 桌面端
只需说话,就能让应用变成你想要的样子。而在"图"这件事上,这句话背后还藏着一句提醒:说清"换成哪张"之外,最好再说一句"保持原来的圆角和边框"。剩下的交给安卓修改大师智改工坊:它按九图的规则去换,而不是把图往上一贴就算完——因为"贴上去"和"换对了",中间差着那几条看不见的黑线。