画九宫格Draw 9-patch

这个九宫格绘画工具(draw9patch.bat)可以让你很容易的通过一个所见即所得(WYS|WYG)的编辑器来创建一个九宫格NinePatch图。

关于九宫格图以及它是如何工作的,请阅读九宫格图像Ninepatch Images主题的相关章节。

面是一个便捷指南。你需要PNG图像来创建一个九宫格。

1. 从一个终端(比如windows浏览器),启动这个draw9patch应用程序,该程序位于你的SDK /tools 目录下。

2. 把你的PNG图像拖放到这个工具的窗口中(或者通过File->Open 9-patch... 来定位文件)。你的工作台将被打开。

左边的窗格是你的绘画区域,你可以在里面编辑可延伸的宫格和内容区域。右边窗格是预览区域,从中你可以预览图形的拉伸。

3. 在1个像素周长里点击,绘制线条来定义可延伸宫格以及(可选的)内容区域。点击右键(或者在苹果机上,按住Shift并点击)取消之前画的线。

4. 这些完成后,选择File > Save 9-patch...

你的图片将以.9.png 文件名保存。

注意: 一个通常的PNG文件(*.png) 加载时,将以一个空的单像素边界补充在图片周围,你可以在里面画可延伸宫格和内容区域。一个前面保存的九宫格文件(*.9.png)将以原样加载,因为这个已经存在。

可选控制包括:

·缩放Zoom: 调整图片大小

·宫格比例Patch scale: 调整预览视图中图像的比例

·显示锁定区域Show lock: 使不可画区域在鼠标移动到该区域上时显示出来。

·显示宫格Show patches: 预览这个绘图区中的可延伸宫格(粉红色代表一个可延伸宫格)。

·显示内容Show content: 预览视图中的高亮内容区域(紫色部分)。

·显示坏宫格Show bad patches: 在宫格区域四周增加一个红色边界,这可能会在图像被延伸时产生人工痕迹。如果你消除所有的坏宫格,延伸视图的视觉一致性将得到维护。

转载于http://dev.10086.cn/cmdn/wiki.index.php?editon-view-2471-1.html#1

一、什么是9.png:
       可能做过任务栏美化的同学都会知道,我靠,framework-res.apk\res\drawable-hdpi 目录下有非常非常多的XXXXXX.9.png图片。
千万不要以为这个9只是png格式图片的命名区分,其实他是一种特殊的格式,在png图片的基础上动了些手脚,而且这种手脚你会
看不见摸不着(详情见下面具体内容)。
       9.png格式的图片是安卓平台上新创的一种被拉伸却不失真的玩意(挺高级的吧),也许有
的同学在做美化的时候很喜欢一个图片素材,重命名替换了drawable-hdpi下的素材,但是运行系统后发现,怎么被拉伸得不像样子
了,哈哈,这就是9.png图片不能轻易碰的神奇所在,不过不要紧,下面看完你就会了,安卓美化大师就是你了。
      首先我们还是得介绍一下,9.png图片他的具体不同之处,它的四周与普通的png图片相比多了一个像素位的白色区域,该区域
只有在图片被还原和制造的时候才能看到,当打包后无法看见,并且图片的总像素会缩小2个像素,比如23x23像素的9.png图片被
打包后会变成21x21像素。所以我们在制作的时候要注意掌握尺寸。
       当我们制作出9.png图片的时候你还有惊奇的发现一个几KB或者几十KB的图片,变得非常的小,一般只有几百个字节那么大,
系统加载起来当然会更加的流畅咯。

重要声明,该制作工具均需要搭建java运行环境,就是下载jdk安装,并在计算机属性中搭建环境变量,具体操作本帖就不讲了,
网上找一下如何搭建环境变量就有了。

二、如何制作9.png图片素材:

1、下载工具:  draw9patch.zip 该工具SDK中自带。
       2、解压,执行draw9patch.bat,会出现如图:

3、将你用PS制作的图片素材,拖到该窗口中,出现如图:

解释:中间黑红条纹部分表示不能编辑,边缘白色透明框就是上述介绍的增加的一像素边框。
       4、将鼠标放在白色边框,点住左键不放拖动,会出现黑色线条如图:
             

解释:1号黑色条位置向下覆盖的区域表示图片横向拉伸时,只拉伸该区域
                        2号黑色条位置向右覆盖的区域表示图片纵向拉伸时,只拉伸该区域  
                        3号黑色条位置向左覆盖的区域表示图片纵向显示内容的区域
                        4号黑色条位置向上覆盖的区域表示图片横向显示内容的区域
                        没有黑色条的位置覆盖的区域是图片拉伸时保持不变(比如,如果图片的四角为弧形的时候,当图片被任意拉伸时,四角的弧形都不会发生改变)
         5、如果失误多选了部分,可按住shift键,点击鼠标左键去掉黑色条
         6、右边3个黑色图形区域为显示当前拉伸效果
         7、选择好区域后,点击左上file-》save 9-path,保存图片,后缀名为xxx.9.png,此时图片效果为:

解释:我们可以看见图片的周围多了4个黑色条,不要急这个图片还不能用,这就是原始的9.png图片,当我们进行下一步操作后,这个图片就变得正常了。

去黑边:
解压xUltimate-d9pc-x86.rar压缩包
1.把预处理黑边的图片到目录example1\res\drawable-hdpi下
2.双击xUltimate-d9pc.exe,听到电脑滴的一声,即可完成去黑边(此时的9.png图片内部加载了黑边信息)
3.根目下会自动生成done文件,在done\example1\res\drawable-hdpi下,就是我们经过处理的9.PNG图片
4.这个图片就是我们要美化替换的图片

======================================反编辑出来的图片作黑边模版=====================================
解压apktool.zip 压缩包
点安装.bat”,此时会在系统c盘生成几个文件。
       3、将你要修改的framework-res.apk(当然也可以是其他系统程序apk文件,如music.apk)重命名为update.apk,并放到c:盘根目录
(必须放c:,因为后面执行的批处理文件编写的是在c:工作)
       4、执行c:根目录下unpack.bat,此时会在c:生成一个update的文件夹,里面的内容就是你要修改的APK文件,并且当你打开drawable-hdpi
文件夹时你会发现里面的9.png图片变得和我们上面制作的相像了,都有4条黑边,这就是该工具将其还原了。
=======================按AIT+TAB键,转换窗口。对照黑边模版,画的黑边速度快,准===============================

android 制作9.png图片

 

1.背景自适应且不失真问题的存在
      制作自适应背景图片是UI开发的一个广泛问题,也是界面设计师渴望解决的问题,我相信我们彼此都深有体会。
      比如,列表的背景图一定,但是列表的高度随着列表数据项会发生变化;标题栏的背景,无论横屏还是竖屏,高分辨率还是低分辨率,都能自动填充满,而且不失真等等背景问题。
      根据以往的经验,我们一般采用先切图后拼凑的做法,这种做法本来我想在这里和大家介绍一下,其实有的时候还是很有用的,但是说起来会比较麻烦,就不说这个非重点了,略去,如果大家真的要介绍,在回复中说明,我再考虑一下。
     Android针对这种情况,专门制作了一种.9.PNG格式来解决这个问题。

2.9.PNG格式。
      我不想在这里过多的讨论PNG格式的定义问题。但是.9.PNG确实是标准的PNG格式,只是在最外面一圈额外增加1px的边框,这个1px的边框就是用来定义图片中可扩展的和静态不变的区域。特别说明,left和top边框中交叉部分是可拉伸部分,未选中部分是静态区域部分。right和bottom边框中交叉部分则是内容部分(变相的相当于定义看一个内边距,神似padding功能,后面我会单独介绍一下),这个参数是可选的, 如下图。
     在Android中以9.PNG格式的图片未背景,则能够自定义拉伸而不失真,比如系统的Button就是一个典型的例子。 
     其实呢,无论是left和top,还是right和bottom都是把图片分成9块 (边角四块是不能缩放的,其他的四块则是允许缩放的),所以叫做9.PNG。

3. 使用Draw9Patch.jar制作9.PNG图片之定义拉伸区域。
      前面已经了解到9.PNG格式的工作方式,下面我们使用谷歌提供的Draw9Patch(运行android-sdk-windows\tools目录下的Draw9Patch.bat)来制作.9.PNG图片。
      第一步:准备要拉伸的图片。
                                                           
      非常小的一张图片,我希望以此为背景,中间部分填充文章内容。
      第二步:制作.9.PNG图片
      打开Draw9Patch,把图片拖进去,如下:

      默认的拉伸是整体拉伸,其实边框部分我们并不想拉伸,好,我们自己来定义拉伸区域,如下图:

然后点击File,导出为content.9.png。
       第三步:在layout文件中使用制作的 .9.PNG图片.
       新建工程Draw9Patch,默认主Activity为Draw9PatchActivity.java:

?
1
2
3
4
5
6
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

我们把content.9.png文件拷贝到/res/drawable文件夹下,打开/res/layout目录下的main.xml,申明如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#777"
    android:padding="8dip"
    >
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="正文:A NinePatchDrawable graphic is a stretchable bitmap image."
    android:background="@drawable/content"
    android:textColor="#000"
    />
</LinearLayout>

如图,

     我们修改text,

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#777"
    android:padding="8dip"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="正文:A NinePatchDrawable graphic is a stretchable bitmap image, which Android will automatically resize to accommodate the contents of the View in which you have placed it as the background. A NinePatch drawable is a standard PNG image that includes an extra 1-pixel-wide border."
    android:background="@drawable/content"
    android:textColor="#000"
    />
</LinearLayout>

如图,

可以看出,边框非常的清晰。下图是未使用.9.PNG的对比图,而且也不是我们要的效果:

      到这里为止,我们已经基本会制作.9.PNG图片了。为了知识体系的全面性和深入性,我们继续。

4.使用Draw9Patch.jar制作9.PNG图片之定义内容区域。
      是不是觉得文字和边距挨的太近,好,我们使用right和bottom边的线来定义内容区域,来达到增大内边距的目的。

      我们定义了一个很小的内容区域,其他的地方则自动充当边框,从而使内边距显的很大,如下图,

      在这里,我要特别说明,一开始为了增大内边距,很容易惯性思维,在<TextView>中申明android:padding="10dip" 之类的,我在这里劝告朋友们不要这么做,一是你将无法预知你的显示,二是这比较混淆,因为设置内容区域就是确定padding,所以我在前面部分说他们是神似。我个人认为通过内容区域设定padding比在布局xml中定义padding更优雅,更简洁!
      关于Draw9Patch工具的其他使用说明,我在次不再累述,因为要说的话太多,为了节省篇幅,请参考官方文档。

5.制作.9.PNG的高级技巧。
       对于初学Draw9Patch的人来说,这可以算是高级技巧,那就是:拉伸区域,可以不是连续的,可以不止一块,而且是和自定义的边框线的长度成正比。
       直接上图说明:

6.SDK中如何处理9.PNG图片。
      SDK专门针对9.PNG做了定义和处理,这里我们只是做个简单的流程分析,Bitmap在读取图像流数据的时候,会把判断图片的NinePatchChunk(9Patch数据块),如果NinePatchChunk不为空,则是NinePatchDrawable,NinePatchDrawable则又会交给NinePatch处理:

?
1
2
3
setNinePatchState(new NinePatchState(
               new NinePatch(bitmap, bitmap.getNinePatchChunk(), "XML 9-patch"),
               padding, dither), r);

NinePatch检验成功则调用本地方法,绘制出最终的图片:

?
1
2
3
nativeDraw(canvas.mNativeCanvas, location,
                mBitmap.ni(), mChunk, paint != null ? paint.mNativePaint : 0,
                canvas.mDensity, mBitmap.mDensity);

7.android系统中大量应用了9.PNG图片。
     通过解压随便一个rom,找到里面的framework_res.apk,里面有大量的9.PNG格式文件,被广泛的应用起来,比如常见的有:
     按钮:  
     解锁:  
     下拉框:  
     标题栏:
     Toast:
      还有搜索,键盘,放大缩小控件,时间加减等等,我就不一一列举。

8.最后送上一些图例,以飨读者,以做后鉴:
 
赏图1 本人之作

 赏图2 下拉按钮
 
赏图3 文章头部背景 
 
赏图4 系统头部背景

赏图5 再来一个头部背景 
谢谢大家的支持。




android 工具 Draw 9-patch 详解相关推荐

  1. Android自动化测试环境部署及adb sdkmanager avdmanager Monitor DDMS工具使用及命令详解

    环境部署及工具使用 系列文章 前言 环境部署 硬件环境 软件环境 ADB工具 adb组成 adb命令 android命令 sdkmanager 命令 avdmanager命令 管理模拟器 monito ...

  2. Android Studio CPU profiler性能分析工具介绍和使用详解

    Android Studio CPU profiler性能分析工具介绍和使用详解 CPU profiler介绍 Android Studio CPU 性能剖析器可实时检查应用的 CPU 使用率和线程活 ...

  3. python 单元测试 工具_Django单元测试工具test client使用详解

    The test client test client是一个python类,来模拟一个简单的"哑"浏览器,允许你来测试你的view函数.你可以使用test client完成下列事情 ...

  4. Android App优化之ANR详解

    引言 背景:Android App优化, 要怎么做? Android App优化之性能分析工具 Android App优化之提升你的App启动速度之理论基础 Android App优化之提升你的App ...

  5. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!...

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  6. Android签名与校验过程详解

    原文:https://blog.csdn.net/gulinxieying/article/details/78677487 目 录 一.签名与校验原理概要    2 1.数字签名简介    2 2. ...

  7. Android网络开发技术实战详解

    <Android网络开发技术实战详解> 基本信息 作者: 朱桂英 丛书名: Android移动开发技术丛书 出版社:电子工业出版社 ISBN:9787121173493 上架时间:2012 ...

  8. iPhone和Android的WEB应用开发详解

    iPhone和Android的WEB应用开发详解 在我们现在的生活中,移动设备的作用日益重要.我们使用它们进行交流.我们使用它们进行导航.我们甚至可以将它们用作方便的手电筒.面向 iPhone 和 A ...

  9. android studio gradle3.3,Android studio 3.2 升级详解及Gradle配置

    Android studio 3.2 升级详解及Gradle配置 发布时间:2018-09-29 15:36, 浏览次数:618 , 标签: Android studio Gradle 一直在使用An ...

  10. JNI开发之-Android.mk和Application.mk 详解

    Android.mk和Application.mk 详解 Android.mk 基础知识 变量和宏 NDK 定义的 include 变量 目标信息变量 模块描述变量 NDK 提供的函数宏 Applic ...

最新文章

  1. twig 调用php函数,twig里使用js变量的方法
  2. leetcode算法题--左旋转字符串
  3. Mongo报如下类似错误时的修改方法Cannot natively represent the long 1396367483000 on this platform...
  4. Window将Redis设置为开机启动
  5. oracle更新字段为null,OracleORA-01451:要修改为NULL的列无法修改为NULL
  6. STM32F103ZET6硬件资源简介
  7. scrcpy---Android投屏神器(使用教程)
  8. Frank and Hall
  9. python sendkeys用法_sendkeys用法详解
  10. mailgun php 邮件发送 实例
  11. 抗疫逆行者网页作业 感动人物HTML网页代码成品 网页作业带JS下拉菜单 最美逆行者网页模板 致敬疫情感动人物网页设计制作
  12. 华为CE6881端口联动限制
  13. 计算多个不同鞋码对应的脚长——C语言
  14. DNA测序也有批次效应?
  15. MFC Windows 程序设计[五十六]之开启子对话框(附源码)
  16. 生产企业原材料订购与运输的研究-数据处理课程设计
  17. 使用vue开发APICloud软件APP的教程
  18. 输入H.264流,输出封装格式流
  19. css样式内联式,外联式,嵌入式
  20. 平衡二叉树的左旋和右旋

热门文章

  1. 用户头像的背景为头像的模糊头像时候
  2. 启明欣欣STM32开发板闪烁LED实验
  3. FLUENT进行组分反应模拟
  4. DWH - 自动化监控BI系统的存储空间
  5. 大数据开发教程——企业级离线数据仓库项目实战开发
  6. 为什么不太建议你通过 Python 去找工作?
  7. 防止刷新或后退页面重复提交表单
  8. 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数
  9. 查找WebSphere Application Server 管理控制台端口号
  10. 港科夜闻|香港科大汪扬教授轻松访谈:对话西泽投资管理主席刘央女士,倾听她跌宕起伏的30年投资生涯...