NinePatch(.9)点9图

9patch 图

什么是 .9

NinePatchDrawable 图形是一种可拉伸的位图,可用作视图的背景。Android 会自动调整图形的大小以适应视图的内容。NinePatch 图片的其中一项用途是用作标准 Android 按钮(按钮必须拉伸以适应各种长度的字符串)的背景。NinePatch 图形是标准 PNG 图片,包含一个额外的 1 像素边框。必须使用 9. Png 扩展名将其保存在项目的 res/drawable/ 目录下。

.9.png 可以保证图片在合适的位置进行局部拉伸,避免了图片全局缩放造成的图片变形问题。

9 patch

84yvv

左侧和顶部的线定义可拉伸区域,通过底部和右侧的线定义可绘制区域。

在上方的图片中,灰色虚线表示图片中为了拉伸图片而复制的区域。在下方的图片中,粉色矩形表示允许放置视图内容的区域。如果内容不适合此区域,则图片会拉伸以使其合适。

.9 图制作工具

Android Studio Draw 9-patch 工具

步骤

  1. 将图片放到 res/drawable
  2. 右击该图片选择 Create 9-Patch file 选项

gx13j

  1. 操作
    • 使用鼠标在图片的边缘拖动就可以进行绘制
    • 按住 shift 键拖动可以进行擦除

Draw 9 patch 工具

02ylr

界面介绍:

这个不能定义多个 Stretch region (拉伸区域) 和 Content Padding

.9 图制作

9 patch 四个边对应的黑线(黑点)的意义

ozsaa

Top, left 定义缩放区域;bottom, right 定义内容区域,可以用来代替内边距

Badge patches

Badge Patches 原因可参考:关于.9图失效以及.9图不可以错过的细节点

解决

假若图片拉伸区域简单,那么请把 left 和 top 的拉伸像素值设置成 1 px,都可以直接避免 bad patches 的产生。

解释:按照上面 bad patches 产生的原因,因为垂直方向和水平方向的像素值只有 1,所以 group 也只有一个,不能作为横纵向对比。那么他们只剩下一个交叉区域的对比了,但是交叉区域又是 1 个 px 的,所以也没有对比可言,所以就不会产生 bad patches 了。

案例:

h6dwu

解决后:

od3zu

示例

原图:等级背景图

slwa0

目标:在不同场景下,图标不会被压贬了

.9 图:

uiutj

注意

  1. 9 patch 图片要放在 drawable 中而不是 mipmap 中
  2. 左边和上边的线用于限制可以拉伸的区域,右边和下边的线用于限制内容可以显示的区域;
  3. 拉伸区域选择没有内容的区域进行拉伸

代码创建 .9

https://juejin.im/entry/5d82306ff265da03d42fdc1e