Android开发之点九图的制作说明
上边的点代表水平拉伸的区域。
右边的点代表文字等的垂直可可显示区域。
下边的点代表文字等的水平可显示区域。
左上重合的区域就是拉伸区域。
右下重合的区域就是显示区域。
“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png
智能手机中有自己主动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的參数不同而改变显示的方向,在界面改变方向后,界面上的图形会由于长宽的变化而产生拉伸,造成图形的失真变形。
我们都知道android平台有多种不同的分辨率。非常多控件的切图文件在被放大拉伸后,边角会模糊失真。
OK。在android平台下使用点九PNG技术,能够将图片横向和纵向同一时候进行拉伸,以实如今多分辨率下的完美显示效果。
【普通拉伸和点九拉伸效果对照】

对照非常明显。使用点九后,仍能保留图像的渐变质感。和圆角的精细度。
从中我们也能够理解为什么叫“点九PNG”,事实上相当于把一张png图分成了9个部分(九宫格)。分别为4个角,4条边,以及一个中间区域,4个角是不做拉升的。所以还能一直保持圆角的清晰状态,而2条水 平边和垂直边分别仅仅做水平和垂直拉伸,所以不会出现边会被拉粗的情况,仅仅有中间用黑线指定的区域做拉伸。结果是图片不会走样
二.“点九”的制作方法
方法1:使用 “draw9patch”工具绘制,流程例如以下

1. 安装工具
首先你须要给自己的电脑安装上java于系统的默认文件夹下。没有安装java的同学能够在百度搜索:jdk-6u20-windows-i586,安装包大小80M左右。
然后使用andriod模拟器—android-sdk-windows,打开SDK/tools文件夹下的“draw9patch.bat”文件,出现加载窗体:

2.导入并编辑
将png图片拖拽到该窗体中
例如以下图,自己主动进入编辑界面。图中介绍了每一个区域的内容及功能凝视。

预览右側的视图发现,图片的边缘处于普通拉伸状态。
如今我们在图片边缘点击左键,绘制出黑线,即图片须要被拉伸的部分。例如以下图。对4条黑线做了凝视。

假设失误多绘的部分,可按住shift键的同一时候点击鼠标左键擦除)。
如图所见。三种拉伸结果均已完美显示,已实现我们想要的拉伸效果,如果这是一个有显示文字的窗口。那么文字显示的区域。程序也会控制在黑线相应范围。

下面这些图片,包含异性(非规则图形)图片,也能够通过点九PNG实现横纵向的自然拉伸。


【draw9patch.bat其它功能说明】
② Show lock:显示不可绘区域
② Show patches:预览这个画图区中的可延伸宫格(粉红色代表一个可延伸区域)
③ Show patches:预览视图中的高亮区域(紫色区域)
④ Show bad patches:在宫格区域四周添加一个红色边界,这可能会在图像被延伸时产生人工痕迹。假设你消除全部的坏宫格,延伸视图的视觉一致性将得到维护。
3.保存和输出
点击左上file- save。保存文件,自己主动生成一张后缀名为“*.9.png”格式的图片,图片上下左右各添加了1px的黑线。
方法2:直接使用 PS等平面工具绘制。流程图例如以下

如流程图所看到的,相对与方法1,仅仅需2个步骤就可得到.9.png图片,详细步骤为:
1. 确定切图后直接改变图片的画布大小,
2. 手动将上下左右各添加1px
3. 使用铅笔工具,手动绘制拉伸区域,色值必须为黑色(#000000)。
4. 存储为web所用格式,选择png-24,储存时手动将后缀名改为.9.png
只是这样的方法的缺点是不能实时预览,推断并測试拉伸区域的准确性。
使用此方法须要注意下面2点:
1. 手绘的黑线拉伸区必须是#000000。透明度100%,而且图像四边不能出现半透明像素。
2. 你的.9.png必须绘有拉伸区域的黑线;
否则。图片不会通过android系统编译,导致程序报错。还有。有同学疑惑解压缩apk文件后,.9.png图片里的黑线怎么没了?
那是由于andriod程序在把文件打包成apk的时候,程序会自己主动把*.9.png图片边缘的黑线去掉,所以解压缩apk后看到的.9.png文件是没有黑线的。
三.使用“点九”的意义
关于下图。经过測试发现使用普通png的显示效果出现明显的变色横纹。而.9.png图片的显示效果明显优于普通png。

使用.9.png格式后,横纹问题基本已解决。由于对于.9.png图片。android系统程序有对其优化的算法。
因为android手机屏幕的材质质量差距大。
非常多屏幕不支持16位以上的颜色显示。
所以渲染后结果出现丢失颜色,故造成横纹显示。
经与多款android手机对照后发现,屏幕越次的手机横纹越明显。
而使用了*.9.png图片技术后,仅仅须要採用一套界面切图去适配不同的分辨率,并且大幅降低安装包的大小。
并且这样程序不须要专门做处理的就能够实现其拉伸。也降低了代码量和开发工作量。
Android开发之点九图的制作说明的更多相关文章
- Xamarin.Android开发实践(九)
		Xamarin.Android之ActionBar与菜单 一.选项卡 如今很多应用都会使用碎片以便在同一个活动中能够显示多个不同的视图.在 Android 3.0 以上的版本中,我们已经可以使用Act ... 
- Android开发,使用背景图(xml drawable)为view 设置边框
		Android 开发中,遇到需要设置边框的情景,使用背景图来实现,代码如下: <layer-list xmlns:android="http://schemas.android.com ... 
- android开发--翻转闹铃(从制作到打包)
		(转载请声明,文章原作地址http://blog.csdn.net/buptgshengod) 最近在家放假,一直想做一个手机应用,于是就自己动手做起来了.想到一个注意就是当闹铃响的时候翻转闹铃,声音 ... 
- Android开发(十九)——ViewFlipper中的onClick事件和onFling事件冲突
		在onDown中设置this.flipper.setClickable(true); 然后在onFling方法中this.flipper.setClickable(false); ps: 其中setO ... 
- Android开发学习——简单类图
		1.类A继承于类B (B 是父类,A是 子类) 2.小汽车.自行车 实现车的接口 3.A中有B这个成员变量,单向关联 4.聚合,整体与部分的关系.has-a B中的构造函数(或set方法)需要 ... 
- Android开发笔记:打包数据库
		对于数据比较多的控制一般会加入SQLite数据库进行数据存储,在打包时这些数据库是不自动打包到apk中的,如何创建数据库呢 方法1:将创建数据库的sql语句在SQLiteHelper继承类中实现,在第 ... 
- 【转】Android开发笔记(序)写在前面的目录
		原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ... 
- 【Android开发日记】之入门篇(十二)——Android组件间的数据传输
		组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ... 
- [转载]Google Android开发精华教程
		原文地址:Android开发精华教程">Google Android开发精华教程作者:huiyi8zai Android是Google于2007年11月5日宣布的基于Linux平台的开 ... 
随机推荐
- Visual C++ 6.0常用快捷键
			一.常用编译相关的快捷键 1.编译(单个文件) Ctrl+F7 2.连接 F7 3.运行 Ctrl+F5 二.常用调试相关的快捷键 1.GO(全速运行) F5 2.Stop Debuging(停 ... 
- AirPlay简介
			AirPlay是苹果公司在iOS4.2即Mac OS Mountain Lion中加入的一种播放技术.可以将iPhone.iPod.iPad和Mac上的视频镜像传送到支持AirPlay的设备上(如音响 ... 
- python类的继承
			继承一个类 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init__(self ... 
- Code First 指定外键名称
			指定类外键有注释(DataAnnotation)和FluentAPI两种方式, 目前掌握的知识我们先把DataAnnotation可用的四种方式总结如下 第一种方法: //1-指定导航属性,会自动生成 ... 
- VLAN间单臂路由访问
			实验书上的拓朴图: 注意TRUNK端口和路由器子端口设置,可以承载不同的VLAN标签. 交换机(用2691加交换模块实现的): Building configuration... Current co ... 
- Java 构造器 一道构造器调用子类重载方法的题目
			构造器中不能new本类对象,否则进入死循环. 构造器没有返回值,也没有void修饰. 使用关键字super可以调用父类的构造器,而且这一句必须放在第一句的位置,否则无法编译. 题目: 请写出以下程序的 ... 
- [转贴]JAVA :CXF 简介
			Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF.CXF 继 ... 
- MVVM_Android-CleanArchitecture
			前言 "Architecture is About Intent, not Frameworks" - Robert C. Martin (Uncle Bob) Uncle Bob ... 
- C++解析JSON之JsonCPP
			一.JSON简介 JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读.编写.解析. JSON由两种基本结构构成: )"名称/值" ... 
- java提高篇(十)-----详解匿名内部类 ,形参为什么要用final
			在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始 ... 
 
			
		