灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2342回复:0

Android应用资源---绘制资源类型(Drawable)(二)

楼主#
更多 发布于:2012-09-06 13:54


Nine-Patch
NinePatch资源是一个PNG图片,在这个图片内能够定义拉伸区域,当在View对象的内容超过了普通图片的边框时,Android会缩放这个拉伸区域。通常,把这种类型的图片作为View对象的背景,这个View对象至少有一个尺寸被设置为”wrap_content”,这样当View对象根据容纳的内容增长时,Nine-Patch图片也会根据View对象的大小被缩放。例如,使用Nine-Patch图片作为Android标准的Button控件的背景,它会根据Button内部容纳的文本来拉伸。
跟普通的位图一样,可以直接Nine-Patch文件,也可以从XML中定义的资源中来。
关于如何创建带有拉伸区域的Nine-Patch文件的讨论,请看2D图形的相关文档。
http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch
Nine-Patch文件
文件位置(FILE LOCATION):
    res/drawable/filename.9.png
    文件名被用于资源ID。
编译资源的数据类型(COMPILED RESOURCE DATATYPE):
    资源指向一个NinePatchDrawable对象。
资源(RESOURCE REFERENCE):
    在java代码中:R.drawable.filename
    在XML中:@[package:]drawable/filename
例子(EXAMPLE):
以下布局XML中使用了res/drawable/myninepatch.9.png图片,作为一个View对象的背景:
<Button
    Android:layout_height="wrap_content"
    Android:layout_width="wrap_content"
    Android:background="@drawable/myninepatch"/>
XML Nine-Patch
一个XML Nine-Patch是指定义在XML中的一个资源,这个资源指向一个Nine-Patch文件。XML能够给图片指定补色。
文件位置(FILE LOCATION):
    res/drawable/filename.xml
    文件名被用作资源的ID。
被编译资源的数据类型(COMPILED RESOURCE DATATYPE):
    资源指向一个NinePatchDrawable对象。
资源(RESOURCE REFERENCE)
    在java代码中:R.drawable.filename
    在XML中:@[package:]drawable/filename
语法(SYNTAX):
   <?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:Android="http://schemas.android.com/apk/res/android"
    Androidrc="@[package:]drawable/drawable_resource"
    Android:dither=["true" |"false"] />

元素(ELEMENTS):
<nine-patch>
     定义Nine-Patch资源和它的属性。
     属性(ATTRIBUTES):
         xmlns:Android
        字符串值,必须的,它定义了XML的命名空间,必须是:http://schemas.android.com/apk/res/android
         Androidrc
        可绘制资源,必须的,它了一个Nine-Patch文件。
         Android:dither
        布尔值,如果位图没有跟屏幕配置相同的像素,那么就启用或禁止位图的仿色处理(例如,一个ARGB 8888位图用于RGB 565的屏幕)。
例子(EXAMPLE):
<?xml version="1.0" encoding="utf-8"?>
<nine-patchxmlns:Android="http://schemas.android.com/apk/res/android"
    Androidrc="@drawable/myninepatch"
    Android:dither="false"/>
层列表
LayerDrawable是一个绘制资源对象,它管理着一个其他绘制资源的数组。列表中的每个可绘制资源会按照列表中的顺序来绘制---列表中最后的资源会被绘制在最最上面。
每个绘制资源都用一个<item>元素来代表,这些<item>元素都被放在一个单独的<layer-list>元素内部。
文件位置(FILE LOCATION):
    res/drawable/filename.xml
    文件名被用作资源ID。
被编译资源的数据类型(COMPILED RESOURCE DATATYPE):
    资源指向一个LayerDrawable对象。
资源应用(RESOURCE REFERENCE):
    在java代码中:R.drawable.filename
    在XML中:@[package:]drawable.filename
语法(SYNTAX):
    <?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:Android="http://schemas.android.com/apk/res/android">
    <item
        Android:drawable="@[package:]drawable/drawable_resource"
        Android:id="@[+][package:]id/resource_name"
        Android:top="dimension"
        Android:right="dimension"
        Android:bottom="dimension"
        Android:left="dimension"/>
</layer-list>
元素(ELEMENTS):
    <layer-list>
       必须的,它必须是根元素,包含了一个或多个<item>元素。
       属性(ATTRIBUTES):
        xmlns:Android
       字符串值,必须的,它定义了XML的命名空间,必须是:http://schemas.android.com/apk/res/android
    <item>
    定义一个层中的可绘制资源,其中的一个属性定义了资源的位置。这个可绘制资源必须是<selector>元素的一个子元素。<item>元素接受<bitmap>子元素。
    属性(ATTRIBUTES):
    Android:drawable
    可以绘制资源,必须的,它指向一个可绘制资源。
    Android:id
    资源ID,针对这个绘制资源的唯一的资源ID。要使用“@+id/name”格式给这个项目创建一个新的资源ID。“+”号指示这个资源应用创建一个新的ID。能够使用这个标识符,通过调用View.fineViewById()或Activity.findViewById()方法来获取和编辑可绘制资源。
    Android:top
    整数值,顶部的偏移像素。
    Android:right
    整数值,右边的偏移像素。
    Android:bottom
    整数值,底部的偏移像素。
    Android:left
    整数值,左边的偏移像素。
默认情况下,所有的可绘制项都会被缩放,以便适应容器View对象的尺寸。因此,把层列表中的图片放到不同的位置,可能会造成View对象的尺寸的增长,并且某些图片也做相应的缩放。要避免列表中的项目被缩放,就要在<item>元素内部使用<bitmap>元素来指定绘制资源,并且资源不缩放的重心,如“center”。如,下面的<item>元素定义了一个能够适应容器View缩放的绘制项目:
<itemAndroid:drawable="@drawable/image"/>
要避免缩放,使用下面的方法来重新定义:
<item>
  <bitmapAndroidrc="@drawable/image"
          Android:gravity="center"/>
</item>
例子(EXAMPLE):
XML文件被保存在res/drawable/layers.xml中
<?xml version="1.0" encoding="utf-8"?>
<layer-listxmlns:Android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmapAndroidrc="@drawable/Android_red"
        Android:gravity="center"/>
    </item>
    <itemAndroid:top="10dp"Android:left="10dp">
      <bitmapAndroidrc="@drawable/Android_green"
        Android:gravity="center"/>
    </item>
    <itemAndroid:top="20dp"Android:left="20dp">
      <bitmapAndroidrc="@drawable/Android_blue"
        Android:gravity="center"/>
    </item>
</layer-list>
要注意是,这个例子使用了嵌套的带有“center”重心的<bitmap>元素来给每个项目定义绘制资源。这样就确保了图片在绘制期间,不会为了适应容器的尺寸而被缩放。
<ImageView
    Android:layout_height="wrap_content"
    Android:layout_width="wrap_content"
    Androidrc="@drawable/layers"/>
下图是绘制结果:




喜欢0 评分0
游客

返回顶部