前几天群成员讨论过关于9patch的工具【我比较喜欢喊它9妹子,西西(*^_^*)】、然后研究了一下,比较简单但是很实用的一个Android sdk 自带工具、这里给大家做一个分享下经验!
1.什么是“9妹”(9patch)?
它是一个对png图片做处理的一个工具,能够为我们生成一个"*.9.png"的图片;
2.何为"*.9.png"?
所谓"*.9.png"这是Android os里所支持的一种特殊的图片格式,用它可以实现部分拉伸;这种图片是经过”9妹“进行特殊处理过的,如果不处理的话,直接用PNG图就会有失真,拉伸不正常的现象出现。
3.它的用途是?
说到用途,这种特殊格式的png图,我也看了网上的相关文章但都是用一个能自适应的button举例子!(如下图)清一色抄袭.. - -、
(此实例咱们直接无视掉,在后面我会给大家灌输游戏中实例)
这个例子是指当button上的字体大小改变,那么文字底下的png图也会自动适应文字。
这似乎表明做Android 软件应用 使用一些组件的的时候会时常用到;
4.那么实际在游戏中到底如何使用呢?什么情况下去使用呢?
....当然啦,身为做游戏我一定要”9妹“利用在咱们游戏中才行,不然岂不是白研究了、经过思考突然想到了一些情况,并且发现“9妹”确实在游戏开发中占有一定的分量!下面我们来先熟习“9妹”工具,然后再跟大家举例,贴图来说明其用途、毕竟有图有真相 呵呵~
启动9妹:
在你Android SDK 路径下 X:\android sdk\tools ,你会找到一个 【draw9patch.bat】,没错这就是9妹啦、官方名 NinePatch ;
提示导入一张png图片,然后真正进入"9妹"的操作界面(如下图): (图1)
序列① :在拉伸区域周围用红色边框显示可能会对拉伸后的图片产生变形的区域,如果完全消除该内容则图片拉伸后是没有变形的,也就是说,不管如何缩放图片显示都是良 好的。 (实际试 发现NinePatch编辑器是根据图片的颜色值来区分是否为bad patch的,一边来说只要色差不是太大不用考虑这个设置。)
序列 ② :区域是导入的图片,以及可操作区域。
序列 ③:这里 zoom:的长条bar 是对导入的图放大缩小操作,这里的放大缩小只是为了让使用者更方便操作,毕竟是对像素点操作比较费眼,下面的 patch scale 是序列 ④区域中的三种形态的拉伸后的一个预览操作,可以看到操作后的图片拉伸后的效果。
序列 ④:区域这里从上到下,依次为:纵向拉伸的效果预览、横向拉伸的效果预览,以及整体拉伸的效果预览
序列 ⑤:这里如果你勾选上,那么当你鼠标放在② 区域内的时候并且当前位置为不可操作区域就会出现lock的一张图,就是显示不可编辑区域 ;
序列 ⑥: 这里勾选上,那么在④ 区域中你就会看到当前操作的像素点在拉伸预览图中的相对位置和效果。
序列⑦:在编辑区域显示图片拉伸的区域;
如何操作:
鼠标左键选取需要拉伸的像素点; shift+鼠标左键取消当前像素点。
操作区域:
大家看到导入的png图片默认周围多了一像素点,也就是这一圈一像素点就是咱们的可操作区域。但是因为下方和右方可操作区域属于可选区域,不用理会;主要大家注意Left 和 top 操作区域;
Top操作区域的一排像素点,表示横向拉伸的像素点;
Left操作区的一排像素点,表示纵向拉伸的像素点;
下图是我对图片的操作:
(图2)
大家看到上方和左边的黑色像素了么?对,这些是我手动操作的地方,我这里是想让此png图像拉伸操作的时候,只是中间区域被拉伸。选择上方中间区域是为了横向拉伸的时候选取的拉伸像素点,左边则是纵向拉伸的;
那么大家现在回头看一眼(图1)然后对比(图2),看到区别了吧!很明显,(图1)我们没有任何操作,默认整体拉伸,那么拉伸的效果很明显的失真了...而(图2)我们指定了拉伸的像素点所以只是中间的被拉伸,图片的花边我们保留不拉伸这样看起来就好太多啦 娃哈哈、
然后通过“9妹”就可以保存出来一张“*.9.png”图片,我们放在android 项目的res 下的 drawable 下就可以拉!
现在我就可以跟大家讲下使用“*.9.png”的好处:
在我们手机游戏开发的过程中,我们最关系的是生成的安装文件、比如j2me 的jar 包,塞班的sis、sisx 以及咱们andrid中的apk都希望打包后的包越小越好、虽然现在的手机趋向于智能了,但是毕竟手机的容量和内存还是有限、身为移动设备开发者的我们对此都很看重,那么通过"9妹"处理后的图片我们就可以省去不少的内存和容量。
1.省精力和时间!
如果我们有一张50*50的类似上面那种带花边的png图片,那么我们在android或者大分辨率的机器上使用的画,肯定需要对其处理,那么要不就是让美工的mm们给咱们重新做一张,那么通过"9妹"处理得到的“*.9.png”就会省去美工的负担了。
2.省内存!
如果不想用代码来对其小图进行缩放来再次使用(因为考虑会失真),那么可能会多加了图片,这样一来游戏包的大小就会增加了,几K—几十K不等,而利用"9妹"处理的就省去了这些麻烦。
3.减少代码量!
有些童鞋该说啦,我用代码一样能实现(图2)的效果不失真,OK,我也知道。当初我在J2ME平台做RPG的时候也是利用设置可视区域等代码来实现的,但是如果你用“.9.png”的方式就更简单!!!
不多吹 “9妹”的好处,下面我们来看看代码如何实现此格式的方式和效果吧!
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
1. packagecom.himi;
2. importandroid.content.Context;
3. importandroid.graphics.Bitmap;
4. importandroid.graphics.BitmapFactory;
5. importandroid.graphics.Canvas;
6. importandroid.graphics.Color;
7. importandroid.graphics.NinePatch;
8. importandroid.graphics.Paint;
9. importandroid.graphics.RectF;
10. importandroid.util.Log;
11. importandroid.view.SurfaceHolder;
12. importandroid.view.SurfaceView;
13. importandroid.view.SurfaceHolder.Callback;
14. publicclassMySurfaceViewextendsSurfaceViewimplementsCallback,Runnable{
15. privateThreadth=newThread(this);
16. privateSurfaceHoldersfh;
17. privateCanvascanvas;
18. privatePaintpaint;
19. privateBitmapbmp_old;
20. privateBitmapbmp_9path;
21. privateNinePatchnp;
22. publicMySurfaceView(Contextcontext){
23. super(context);
24. this.setKeepScreenOn(true);
25. bmp_old=BitmapFactory.decodeResource(getResources(),R.drawable.himi_old);
26. bmp_9path=BitmapFactory.decodeResource(getResources(),R.drawable.himi_9path);
27. np=newNinePatch(bmp_9path,bmp_9path.getNinePatchChunk(),null);
28. //创建一个ninePatch的对象实例,第一个参数是bitmap、第二个参数是byte[],这里其实要求我们传入
29. //如何处理拉伸方式,当然我们不需要自己传入,因为“.9.png”图片自身有这些信息数据,
30. //也就是我们用“9妹”工具操作的信息!我们直接用“.9.png”图片自身的数据调用getNinePatchChunk()即可
31. //第三个参数是图片源的名称,这个参数为可选参数,直接null~就OK~
32. sfh=this.getHolder();
33. sfh.addCallback(this);
34. paint=newPaint();
35. paint.setAntiAlias(true);
36. setFocusable(true);
37. }
38. publicvoidsurfaceCreated(SurfaceHolderholder){
39. Log.v("Himi","surfaceCreated");
40. th.start();
41. }
42. /**
43. *@authorHimi
44. */
45. publicvoiddraw(){
46. canvas=sfh.lockCanvas();
47. canvas.drawColor(Color.BLACK);
48. RectFrectf_old_two=newRectF(0,50,bmp_old.getWidth()*2,120+bmp_old.getHeight()*2);//备注1
49. RectFrectf_old_third=newRectF(0,120+bmp_old.getHeight()*2,bmp_old.getWidth()*3,
50. 140+bmp_old.getHeight()*2+bmp_old.getHeight()*3);
51. //--------下面是对正常png绘画方法-----------
52. canvas.drawBitmap(bmp_old,0,0,paint);
53. canvas.drawBitmap(bmp_old,null,rectf_old_two,paint);
54. canvas.drawBitmap(bmp_old,null,rectf_old_third,paint);
55. RectFrectf_9path_two=newRectF(250,50,250+bmp_9path.getWidth()*2,90+bmp_9path.getHeight()*2);
56. RectFrectf_9path_third=newRectF(250,120+bmp_9path.getHeight()*2,250+bmp_9path.getWidth()*3,
57. 140+bmp_9path.getHeight()*2
58. +bmp_9path.getHeight()*3);
59. canvas.drawBitmap(bmp_9path,250,0,paint);
60. //--------下面是".9.png"图像的绘画方法-----------
61. np.draw(canvas,rectf_9path_two);
62. np.draw(canvas,rectf_9path_third);
63. sfh.unlockCanvasAndPost(canvas);
64. }
65. publicvoidrun(){
66. //TODOAuto-generatedmethodstub
67. while(true){
68. draw();
69. try{
70. Thread.sleep(100);
71. }catch(Exceptionex){
72. }
73. }
74. }
75. publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){
76. Log.v("Himi","surfaceChanged");
77. }
78. publicvoidsurfaceDestroyed(SurfaceHolderholder){
79. Log.v("Himi","surfaceDestroyed");
80. }
81. }
下图是模拟器中的效果图、
左边是正常png的缩放不同大小的情况,右边是咱们的9妹处理过的“*.9.png”、娃哈哈,怎么样 效果明显不一样吧!
好啦,到这里就结篇吧,挺累的 写了三个多小时了....... 希望大家以后多多的利用 “9妹”哦、
(推荐大家订阅本博客,因为咱的更新速度可是很快的~娃哈哈)
分享到:
相关推荐
`readme.md` 文件通常包含有关9-Patch工具的使用指南和注意事项。在该压缩包中,这个文件可能详细介绍了如何创建、编辑和使用9-Patch图,包括使用Android Studio内置的9-Patch绘图工具,或是第三方软件如Draw 9-...
在这个名为"Android9妹工具(9Patch)_android源码.zip"的压缩包中,可能包含了关于9Patch工具的详细信息以及可能的源代码,让我们来深入了解一下这个重要的Android开发知识点。 9Patch是一种PNG图片文件,扩展名为.9...
9patch工具允许用户直观地划定这些可拉伸和不可拉伸的区域,以确保图像在扩展时保持其视觉质量。 9patch mac版工具的功能可能包括以下几点: 1. **图形编辑**:用户可以直接在工具中打开PNG图像,并在其四周添加...
Draw9Patch工具就是专门用来创建和编辑这种类型图像的。 使用Draw9Patch的过程主要包括以下步骤: 1. **打开工具**:首先,你需要下载并运行Draw9Patch工具。这个工具通常包含在Android SDK中,可以通过SDK ...
使用draw9patch工具,你可以: 1. **导入图片**:首先,你需要导入一个普通的PNG图片到工具中,这个图片将成为9patch的基础。 2. **绘制分割线**:在图像的四个边缘(顶部、底部、左侧和右侧)绘制黑色像素线。这些...
9patch工具是Android SDK提供的一种图形编辑工具,它允许开发者定义图片的可拉伸区域和不变区域,以确保在不同尺寸的屏幕上正确显示。以下是对9patch工具使用的详细讲解和Demo源码分析。 1. 9patch文件结构: 9...
1. **导入9patch 图片**:将需要处理的9patch 文件导入到工具中,通常这些文件的扩展名为 `.9.png`。 2. **智能识别**:工具会自动识别出9patch 图片的拉伸和不变区域的黑色像素。 3. **去除黑点**:一键操作,移除...
2. **源码说明.txt**:这个文件很可能包含了关于如何使用9-Patch工具或者处理9-Patch图像的源码指南和解释。它可能会涵盖如何在代码中加载和使用9-Patch图像,以及如何创建和编辑9-Patch文件的方法。 3. **双击访问...
在Android开发中,9-Patch(也称为9妹工具)是一种特殊的图像格式,它允许开发者创建可拉伸的图片资源,以适应不同尺寸的屏幕。9-Patch图像在设计时预定义了可拉伸和不可拉伸的区域,从而确保在缩放时保持图像的质量...
9.png编辑器,如Draw9Patch,是开发者常用的工具,它允许用户方便地创建和编辑这类图像,确保UI组件在不同尺寸的屏幕上能够正确拉伸和显示。Draw9Patch的汉化版则为不熟悉英文的开发者提供了便利,使得他们可以更加...
在Android应用开发中,"Draw9patch"是一个至关重要的工具,尤其对于UI设计者和开发者而言。九宫格绘图工具,即Draw9patch,是一个官方提供的命令行实用程序,用于创建 Nine-Patch 图片,这种特殊的图片格式允许图像...
以下是关于Draw9patch工具及其使用的一些详细知识点: 1. **工具界面**:Draw9patch工具提供了一个简洁的工作界面,包括图像编辑区、边框标记区和预览区。用户可以加载图片并在四个边缘和角落添加黑色像素条,这些...
以下是关于9-Patch图的详细知识: 1. **9-Patch 图像格式** 9-Patch图是一种特殊的PNG图像,它在图像的边缘添加了额外的像素条,这些像素条包含了图像如何拉伸和收缩的信息。每个角落的像素条表示图像是否可以在...
描述中的"制作.9.png图片,draw9-patch教程及draw9-patch"进一步强调了这个教程会指导用户如何创建和理解9-patch图像,并通过使用draw9-patch工具来实现这一目标。 标签"android、9-patch、9.png"分别代表了这个...