Nine-patch

NinePatchDrawable图形是可拉伸的位图图片,Android系统会根据View对象中的内容来自动的调整背景图片。使用NinePatch图片的一个例子就是标准Android按钮的背景图片---按钮必须根据字符串的长度来拉伸背景图片。NinePathc图形绘制的是一个标准的PNG图片,它包含了一个像素宽的边框。图片文件的扩展名必须是.9.png,并且要保存到工程的res/drawable/目录中。

边框被用于定义图片的拉伸和静态区域。通过在边框的左边和上边(其他边框的像素应该完成透明或是白色的)绘制一个或多个1像素宽的黑线来指定一个可拉伸的区域。可有多个可拉伸的区域,但它们的相对尺寸都相同,最大的区域始终要保持最大的区域。

还可以通过绘制右边线和底边线来定义一个图片的可选绘制区域(有效的填充线)。如果一个View对象设置NinePatch图片作为它的背景,并且给该View对象指定了文本,那么它就会自我拉伸,以便所有的文本都能够被填充在由右边线和底边线(如果包括的话)所设计的内部区域,如果不包括填充线,Android系统会使用左边线和上边线来定义该绘制区域。

要澄清不同边线间的差异,为了拉伸图片,左边线和上边线定义的图片的像素被允许复制。底边线和右边线定义了图片内相对区域,View对象的内容被允许放到这个区域内。

下图是用于定义按钮的一个NinePatch图片文件:

这个NinePatch图片用左边线和上边线定义了一个可拉伸的区域,用右边线和底边线定义了一个可绘图的区域。为了拉伸图片,在上面的那个图片中,灰色的点划线定指定了图片将要被重复的区域。在下面的那个图片中,粉色的矩形指明了View的内容被允许放置的区域。如果该区域不同完全填充View对象的内容,那么该图片就会被拉伸,直到内容被完全填充。

Draw 9-patch工具,使用WYSIWYG图形编辑器,提供非常方便的创建NinePatch图片的方法。如果定义的可拉伸区域在绘制构件的过程中存在像素复制的风险,它甚至会产生一个警告。

示例XML

该布局XML演示了如何把一个NinePatch图片添加到一对按钮中(NinePatch图片被保存在res/drawable/my_button_background.9.png中):

<Buttonid="@+id/tiny"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:text="Tiny"
android:textSize="8sp"
android:background="@drawable/my_button_background"/>

<Buttonid="@+id/big"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:text="Biiiiiiig text!"
android:textSize="30sp"
android:background="@drawable/my_button_background"/>

要注意的是,宽度和高度属性都被设置成了”wrap_content”,以便按钮能够根据文本尺寸来调整大小。

以下是使用上面显示的图片和XML定义所展现的两个按钮。注意,按钮的宽度和高度是如何根据文本的尺寸来拉伸背景图片的。

更多相关文章

  1. android基础回顾(三)基础UI组件
  2. android人脸识别——HowOld测测你的年龄和性别
  3. android Bitmap、Drawable、byte[]相互转换
  4. Android(安卓)JNI 图片作为传递参数1
  5. Android(安卓)调用系统相机,拍照,并上传图片所注意的一些问题
  6. 【Android】GridView显示大量图片缓存问题(一)
  7. h5页面引用idangerous.swiper.js 插件兼容ios和android出现的问
  8. Android(安卓)WebView的缓存
  9. 菜鸟也能解决android中的OOM问题

随机推荐

  1. 设置ubuntu Android(安卓)sdk环境变量
  2. Android之intent传值的三种方法
  3. Android(安卓)PopupWindow响应返回键最正
  4. android 蓝牙 获取蓝牙地址名字
  5. Android代码调试报错
  6. cordova打包app环境搭建
  7. Professional Android(安卓)2 Developmen
  8. 二维码:问题和资料
  9. Android开发之《Android应用开发揭秘》UI
  10. [Unity for android]Unity在安卓机上调试