- 浏览: 732988 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
lingsuch:
Android网络连接判断与处理 -
月光照着我:
写的不错,作为笔记了
Android中LayoutInflater的使用 -
智博王锋:
好文章是要顶的!
Android中LayoutInflater的使用 -
云南白药:
...
Android中LayoutInflater的使用 -
万新one:
理解了许多。解释的不错。3Q.
Android中LayoutInflater的使用
做人要大度,海纳百川,做事要圆滑,左右逢源,这让我想到了编程也是如此,代码要扩展,界面也要考虑自适应。
这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用。
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" ?>
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" ?>
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 系统头部背景
发表评论
-
Android生成签名文件并用其对apk文件进行签名(Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误完美解决)
2013-09-11 15:09 9714最近编程时遇到问题:写了一个android小程序,打包后用 ... -
Android 引用外部项目库
2013-02-05 16:36 2920项目中要集成其他项目由于集成项目庞大不想机械的copy,就想 ... -
Android网络连接判断与处理
2013-01-29 16:33 22170获取网络信息需要在AndroidManifest.xml文 ... -
Android有用代码片段2
2013-01-22 19:51 2077记得2011年的时候,整理了android有用代码片段这篇文 ... -
android有用代码片段
2013-01-22 19:48 2872有时候,需要一些小的功能,找到以后,就把它贴到了博客下面, ... -
Android解析Json(Google Gson)
2012-09-21 09:43 3877什么是JSON? 1.JSON:Javascript ... -
Android第三方包组件实现总结
2012-09-03 15:35 2119前沿: 在android开发过程中,往往会需要创建组件 ... -
Android 获取手机总内存和可用内存等信息
2012-08-17 17:35 5883在android开发中,有时候我们想获取手机的一些硬件信息 ... -
Android中attr自定义属性详解
2012-07-19 10:17 1464首先在你需要使用自定义属性的布局文件中定义标签,当 ... -
Android 读取<meta-data>元素的数据
2012-06-21 13:31 1272在AndroidManifest.xml ... -
获取AndroidManifest里的信息
2012-06-21 12:09 993看附件 -
Java基础之软引用、弱引用、虚引用
2012-06-18 10:02 11581、概述 在JDK1.2以前 ... -
Android播放声音MediaPlayer类详细介绍
2012-06-06 13:13 11932MediaPlayer ... -
Android 画图之抗锯齿
2012-05-30 18:00 1977在画图的时候,图片如果旋转或缩放之 ... -
Android 画布绘图
2012-05-30 17:58 31958我们已经介绍了Canvas,在 ... -
Android中LayoutInflater的使用
2012-05-28 12:15 33589Inflater英文意思是膨胀,在Android中应该是扩展的 ... -
Android Matrix理论与应用详解,附三角函数公式
2012-03-19 15:13 5073Matrix学习——基础知识 以前在线性代数中学习了矩阵,对 ... -
Android 实现从网络上异步加载图像
2012-03-17 15:44 1164研究了android从网络上异步加载图像,现总结如下: (1 ... -
Activity中ConfigChanges属性配置描述
2012-02-08 23:01 2119通过设置这个属性可以使Activity捕捉设备状态变化,以下是 ... -
Android代码混淆
2011-12-26 18:23 3317一个xxx.apk提交给测试、 ok,去倒杯水,看看网页 ...
相关推荐
9patch图片技术是Android原生提供的一种优化UI设计的方法,能够帮助开发者实现灵活、自适应的界面布局。在这个"draw9patch.zip"压缩包中,包含了一个名为"draw9patch"的工具,它可以帮助我们便捷地创建和编辑9patch...
在Android开发中,为了创建可伸缩且不失真的UI元素,如按钮背景,开发者常常会使用9-Patch图片。9-Patch(也称为9宫格图片)是一种特殊的图像格式,由Android系统提供,用于处理图形的拉伸和缩放,确保在不同尺寸的...
在Android应用开发中,UI设计是至关重要的一环,而Draw9Patch工具则是Android Studio提供的一种强大的图形编辑工具,它使得开发者和设计师能够更高效地创建可拉伸的图像资源,特别是对于按钮、背景等需要适应不同...
《详解Draw9Patch:Android开发中的点九切图技术》 在Android应用开发中,UI设计是至关重要的一环,而高效、灵活的图片资源管理则是提升用户体验的关键因素之一。Draw9Patch工具,作为Android SDK的一部分,就是专...
描述中的"制作.9.png图片,draw9-patch教程及draw9-patch"进一步强调了这个教程会指导用户如何创建和理解9-patch图像,并通过使用draw9-patch工具来实现这一目标。 标签"android、9-patch、9.png"分别代表了这个...
即Draw9patch,是一个官方提供的命令行实用程序,用于创建 Nine-Patch 图片,这种特殊的图片格式允许图像在水平和垂直方向上灵活拉伸,同时保持关键区域的完整性,确保元素如按钮、背景等在不同尺寸的屏幕上看起来...
3. 配置:在XML布局文件中,可以使用`<ImageView>`或`<Background>`标签设置Draw9Patch作为背景,并通过属性如`android:scaleType`控制图片的显示方式。 四、Draw9Patch的应用场景 1. 应用启动画面:启动画面通常...
在Android开发中,Draw9Patch是一款非常重要的工具,它用于创建具有可伸缩性的图形资源,特别是对于界面布局中的背景图或按钮等元素。这种特殊格式的图片被称为".9.png",因为它在图像的四边和对角线上添加了额外的...
在该压缩包中,这个文件可能详细介绍了如何创建、编辑和使用9-Patch图,包括使用Android Studio内置的9-Patch绘图工具,或是第三方软件如Draw 9-patch。此外,它可能还会涉及9-Patch图的保存格式以及如何在代码中...
"Draw9patch"是Android应用开发中的一个关键工具,它允许开发者创建可伸缩的图形资源,特别是用于界面布局的背景图像。这个工具是专门为移动设备的UI设计优化的,确保图片在不同尺寸和分辨率的屏幕上能正确拉伸,...
在Android开发中,9-patch文件通常使用`.9.png`的扩展名,它可以被Android Studio和Android SDK中的`draw9patch`工具处理。但如果你在Mac上工作,可能需要使用第三方工具,如这个安装包提供的工具,因为默认的`draw9...
总之,`.9.PNG`格式和`Draw9Patch.jar`工具为Android开发者提供了一种强大的解决方案,可以轻松创建适应各种尺寸屏幕的背景图像,同时保持视觉效果的一致性和专业性。通过熟练掌握这一技术,开发者可以提高应用的...
同时,使用Android Studio自带的draw9patch工具,开发者可以方便地创建和编辑9-patch图片,以满足特定的设计需求。总之,熟悉和掌握9-patch图片的制作与使用是每个Android开发者必备的技能之一。
使用9-Patch图对于实现响应式布局至关重要,特别是在Android平台,因为设备的屏幕尺寸和分辨率变化广泛。它可以确保UI元素在不同设备上看起来一致,且不会因为拉伸而失真。 6. **优化资源** 虽然9-Patch图可以...
在Android开发中,9Patch是一种特殊的图像格式,用于创建可伸缩的图形资源,尤其适合制作界面元素如按钮、背景等。9Patch工具是Android开发者不可或缺的辅助工具,它允许开发者精确地定义图像的拉伸区域,从而确保...
在Android Studio中,有一个内置的9Patch编辑器,名为draw9patch,它允许开发者绘制这些标记。通过这个工具,你可以选择哪些部分可以水平或垂直拉伸,哪些部分是固定不变的。通常,9Patch被广泛应用于UI元素,如按钮...