我最近听说了9-patch图像。我知道它是由9个平铺且可拉伸的部分组成的。我想了解更多关于它的信息。
我如何创建一个9-patch图像?
是否有任何工具?我可以从AndroidSDK或代码中创建吗?
9-patch相对于常规png的主要优势是什么?
(它是否可以根据屏幕动态/自动地进行拉伸?)
我最近听说了9-patch图像。我知道它是由9个平铺且可拉伸的部分组成的。我想了解更多关于它的信息。
我如何创建一个9-patch图像?
是否有任何工具?我可以从AndroidSDK或代码中创建吗?
9-patch相对于常规png的主要优势是什么?
(它是否可以根据屏幕动态/自动地进行拉伸?)
大多数示例讨论创建9-patch图像,但实现细节通常被留在高层次上。
尼克(Nick)在上面的帖子 - 使用好的9-patch教程提供了一个可下载的工作项目文件,解决了问题。
以下是对我有用的主要实现细节(一旦您准备好9-patch图像):
引用名称为 drawable 的可绘制对象,但不包括 .9.png(Eclipse 中的自动完成会照顾到这一点)
确保主 /drawable 文件夹下只有1个图像(而不是每个 dpi 文件夹的版本)
必须使用 :background 来指定图像,而不是 :src (这让我卡住了一段时间)
android:background="@drawable/splash_logo"
确保包含图像的布局和图像本身正在使用:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
:background
,在什么场景下你尝试使用了 fill_parent
用于 layout_height
和 layout_width
的两个属性?肯定只需要其中一个是 fill_parent
吧? - Tash Pemhiwa使用9-patch图像,您可以选择拉伸哪个部分的图像。
它必须是png格式的图像,名称必须以.9.png结尾(例如something.9.png)。
http://developer.android.com/tools/help/draw9patch.html
所有密度的简单工具:
http://android-ui-utils.googlecode.com/hg/asset-studio/dist/nine-patches.html
1.什么是NinePatch图片?
NinePatch图片是PNG图像,标记可拉伸的部分。它们的扩展名为image_name.9.png
。
2.它们在安卓项目中存储在哪里?
res/drawable/image_name.9.png
3.如何为您的安卓应用程序创建NinePatch图像?
Android SDK包括一个WYSIWIG draw9patch.jar
工具,该工具位于您的Android SDK /tools
文件夹内。
步骤1,由于您还不熟悉,首先准备一个xxxhdpi的png大图像来玩耍。
步骤2,该图像所需的可扩展区域必须尽可能地缩短(通过删除冗余/重复的颜色部分),因为9-patch没有“减少”图像的功能,只能“扩展”图像。
我个人使用ImageMagick命令行工具进行转换,例如:
convert -trim 'my_image.png' png32:my_image_trim.png #trim extra transparent surrounded image
rm lala*; convert my_image_trim.png -crop 310 +repage +adjoin png32:lala%02d.png #cut redundant/repeat center part
convert +append lala02.png lala05.png png32:out_right.png #append left/right images side by side
convert -resize 144x144\! out_right.png png32:my_image.png #resize to the desired dpi
转换时有一个陷阱:我必须以png32为前缀,否则将得到黑色的9-patch图像,请参见this thread。
步骤3,将图像复制到Android Studio drawable中,然后右键单击并选择菜单项“创建9-Patch文件...”。将生成一个带有相同图像名称的.9.png新图像。现在可以删除原始图像。在重构更名备份时要小心,因为它也会重命名XML图像ID,并使您想知道为什么9-patch图像不起作用,因为XML仍然引用非9-patch图像。
步骤4,左侧和顶部的2条黑线形成可扩展的矩形区域,而右侧和底部的2条黑线形成文本矩形区域。
随着文本增长,您的图像大小将在声明的可扩展区域上增加。而文本区域意味着只允许在该区域内输入文本。
对于简单的用法,您无需从头开始绘制黑点/线,如果您的9-Patch图像是由Android Studio生成的,则已经存在于图像的顶部、左侧、底部、右侧后面的4条黑线。如果您看不到那些线条,请“放大”。
两条黑线的初始位置,一条垂直,一条水平,都表示可扩展区域:
两条黑线的初始位置,一条垂直,一条水平,都表示文本区域:
以上是拖动缩短长度、调整这些线的起始位置和结束位置之前的黑线原始位置。
可扩展区域和文本区域可以根据您的需要而不同。但是通常情况下,可扩展区域应该等于或小于文本区域,一个经典的例子就是聊天气泡图像:
上面的图片上下黑线宽度相等,但右侧黑线高于左线,这也意味着文本始终保持在底部曲线的一半,无论是最小尺寸还是扩展尺寸。并且它只在文本区域内扩展。wrap_content
使其可扩展:<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/your_9_patch_image_name_excluded_.9"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<2nd TextView />
</LinearLayout>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:background="@drawable/your_9_patch_image_name_excluded_.9"
android:layout_gravity="center"
/>
9 Patch图像实际上是可拉伸、可重复使用的图像,缩小到最小尺寸。在不同屏幕尺寸下,图像不会延展和失去比例。另一个最大的优势是内存。
相同大小的内存可以用于不同尺寸的设备。设计良好的9-patch图像较少出错且具有高度的可重用性。
这是一个好工具: 点击这里。
9 Patch 图像是可拉伸、可重复的图像,缩小到它们最小的尺寸。最简单的例子是,如果你把一个圆角 div 切成 9 个正方形,就像玩井字棋一样。四个角不会改变大小,但是静态,而其他5个部分将被拉伸或重复,以使整个图像适当地缩放。
通过这种解释和 CSS3 的出现,你可能认为没有理由使用 9 Patch 图像,但是“9 Patch”这个名称是一个错误。这些图像可以被切割成更小的块。
9 Patch 图像包含了一个索引,用 1px 的边框添加到图像中来表示哪个部分是什么。边框中的颜色确定一个部分是静态的(不缩放),还是拉伸,或者是重复的。
谷歌幻灯片:https://docs.google.com/present/view?id=dc7ghz8w_34f8338rcg
另外,关于9-patch图像的Android开发者信息,请参见:http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch