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

缩放可绘制资源

定义在XML中的一个可绘制资源,它能够基于自己当前的级别来改变另一个可绘制资源的尺寸。

文件位置(FILE LOCATION):

    res/drawable/filename.xml

    文件名被用作资源ID

被编译资源的数据类型(COMPILED RESOURCE DATATYPE):

    资源指向一个ScaleDrawable对象。

资源引用(RESOURCE REFERENCE

    Java代码中:R.drawable.filename

    XML中:@[package:]drawable/filename

语法(SYNTAX):

   <?xml version="1.0" encoding="utf-8"?>
<scale
   
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:drawable="@drawable/drawable_resource"
   
android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                         
"fill_vertical" | "center_horizontal" | "fill_horizontal"
|
                         
"center" | "fill" | "clip_vertical" | "clip_horizontal"
]
   
android:scaleHeight="percentage"

   
android:scaleWidth="percentage"/>

元素(ELEMENTS):

     <scale>

     定义缩放可绘制资源。它必须是根元素。

     属性(ATTRIBUTES):

     xmlns:android

     字符串值,必须的。它定义了XML的命名空间,必须是:http://schemas.android.com/apk/res/android

     android:drawable

     可绘制资源,必须的,它指向一个要引用的可绘制资源。

     android:scaleGravity

     关键设置,它指定了缩放之后的重力位置。

     它必须是下列常量的一个或多个组合(多个的场合用“|”符合来连接)。 

说明

top

把对象放到容器的顶部,不改变它的尺寸。

bottom

把对象放到容器的底部,不改变它的尺寸。

left

把对象放到容器的左边,不改变它的尺寸。这是默认的设置。

right

把对象放到容器的右边,不改变它的尺寸。

center_vertical

把对象放在容器的垂直中心位置,不改变它的尺寸。

fill_vertical

如果需要,对象的垂直尺寸会增长,以便在垂直方向能够完全填充它的容器。

center_horizontal

把对象放在容器的水平中心,不改变它的尺寸。

fill_horizontal

如果需要,对象会增长它的水平尺寸,以便在水平方向能够完全填充它的容器。

center

把对象放到它的容器的中心位置,不改变它的尺寸。

fill

如果需要,对象水平和垂直尺寸都会增长,以便能够完全填充它的容器。

clip_vertical

额外的选项,它能够把它的容器的上下边界,设置为子对象的上下边缘的裁剪边界。裁剪要基于对象垂直重力设置:如果重力设置为top,则裁剪下边,如果设置为bottom,则裁剪上边,否则则上下两边都要裁剪。

clip_horizontal

额外的选项,它能够把它的容器的左右边界,设置为子对象的左右边缘的裁剪边界。裁剪要基于对象垂直重力设置:如果重力设置为right,则裁剪左边,如果设置为left,则裁剪右边,否则则左右两边都要裁剪。

android:scaleHeight

百分比。它指定了缩放的高度。用可绘制资源的上下边界之间高度的百分比来表示。格式是xx%,例如:100%12.5%,等。

android:scaleWidth

百分比。它指定了缩放的宽度。用可绘制资源的左右边界之间宽度的百分比来表示。格式是xx%,例如:100%12.5%等。

例子(EXAMPLE):

<?xml version="1.0" encoding="utf-8"?>
<scalexmlns:android="http://schemas.android.com/apk/res/android"
   
android:drawable="@drawable/logo"
   
android:scaleGravity="center_vertical|center_horizontal"
   
android:scaleHeight="80%"
   
android:scaleWidth="80%"/>

形状可绘制资源

它是定义在XML中的几何形状。

文件位置(FILE LOCATION):

res/drawable/filename.xml

文件被用作资源ID

被编译资源的数据类型(COMPILED RESOURCE DATATYPE):

资源指向一个GradientDrawable对象

资源引用(RESOURCE REFERENCE):

Java代码中:R.drawable.filename

XML中:@[package]drawable/filename

语法(SYNTAX):

<?xml version="1.0" encoding="utf-8"?>
<shape
   
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:shape=["rectangle" | "oval" | "line" | "ring"] >
   
<corners
       
android:radius="integer"
       
android:topLeftRadius="integer"
       
android:topRightRadius="integer"
       
android:bottomLeftRadius="integer"
       
android:bottomRightRadius="integer"/>
   
<gradient
       
android:angle="integer"
       
android:centerX="integer"
       
android:centerY="integer"
       
android:centerColor="integer"
       
android:endColor="color"
       
android:gradientRadius="integer"
       
android:startColor="color"
       
android:type=["linear" | "radial" | "sweep"]
       
android:useLevel=["true" | "false"] />

   
<padding
       
android:left="integer"
       
android:top="integer"
       
android:right="integer"
       
android:bottom="integer"/>
   
<size
       
android:width="integer"
       
android:height="integer"/>
   
<solid
       
android:color="color"/>
   
<stroke
       
android:width="integer"
       
android:color="color"
       
android:dashWidth="integer"
       
android:dashGap="integer"/>
</shape>

元素(ELEMENTS):

<shape>

定义一个几何形状资源,它必须是根元素。

属性(ATTRIBUTES):

    xmlns:android

    字符串值,必须的。它定义了XML的命名空间,必须是:http://schemas.android.com/apk/res/android

    android:shape

    关键属性,它定义了形状的类型,有效值如下:

说明

rectangle

View对象中填充一个矩形。这是默认的形状。

oval

适合View对象大小的椭圆形。

line

贯穿View对象宽度的一个条水平线。这个形状需要用<stroke>元素来定义线的宽度。

ring

一个圆环

下列属性只在android:shape=”ring”时使用:

     android:innerRadiux

    尺寸值,它用尺寸值或尺寸资源指定圆环内部的半径(指中间的圆孔的半径)。

     android:innerRadiusRatio

    浮点值,它用圆环宽度的比率来表示内部圆环的半径。例如,如果android:innerRadiusRatio=”5”,那么内部半径就等于圆环的宽度除以5。这个值会被android:innerRadius的值覆盖。默认是9

     android:thickness

    尺寸值,它用一个尺寸值或尺寸资源来定义圆环的厚度。

     android:thicknessRatio

    浮点值。它用圆环宽度的比率来表示圆环的厚度。例如,如果android:thicknessRatio=”2”,那么厚度就等于圆环的宽度除以2。这个值会被android:innerRadius覆盖。默认值是3

     android:useLevel

    布尔值,如果这个形状要用于LevelListDrawable对象,那么就设置为true。通常应该设置为false或者让形状不可见。

<corners>

给几何形状创建一个圆角,它只应用与矩形。

    属性(ATTRIBUTES):

      android:radius

     尺寸值,用尺寸值或尺寸资源(dimension resource)定义所有圆角的半径,它会被下列属性定义的每个角的值所覆盖。

      android:topLeftRadius

     尺寸值,它用尺寸值或尺寸资源定义左上角的圆角半径。

      android:topRightRadius

     尺寸值,它用尺寸值或尺寸资源定义右上角的圆角半径。

      android:bottomLeftRadius

     尺寸值,它用尺寸值或尺寸资源定义左下角的圆角半径。

      android:bottomRightRadius

     尺寸值,它用尺寸值或尺寸资源定义右下角的圆角半径。

注意:最初必须给每个角提供一个比1大的圆角半径,否则角不会被圆化。如果要想让角没有圆弧,一种工作方式是使用android:radius属性来设置默认的大于1的圆角半径,然后对于不想要圆弧的角,设置对应的属性为0dp,这样这个角就不会有圆弧了。

<gradient>

为几何形状指定渐变色。

     属性(ATTRIBUTES):

       android:angle

      整数值,以度为单位,指定渐变的角度。从左到右是0度,从下到上是90度。它必须是45的倍数,默认值是0.

       android:centerX

      浮点数,它指定了渐变中心的X点的相对位置(0-1.0

       android:centerY

      浮点数,它指定了渐变中心的Y点的相对位置(0-1.0

       android:centerColor

      颜色值。它指定了开始和结束颜色之间的可选颜色,用十六进制的颜色值或颜色资源来表示。

       android:endColor

      颜色值。它指定了渐变结束时的颜色,用十六进制的颜色值或颜色资源来表示。

       android:gradientRadius

      浮点值,它指定了渐变的半径,只有在android:type=”radial”时才使用这个设置。

       android:startColor

      颜色值,它指定了渐变开始时的颜色,用十六进制的颜色值或颜色资源来表示。

       android:type 

       关键设置,它指定了要使用的渐变模式的类型,下表是有效值:

说明

linear

线性渐变,这是默认设置

radial

放射性渐变,以开始色为中心。

sweep

扫描线式的渐变。

       android:useLevel

     布尔值,如果要使用LevelListDrawable对象,就要设置为true

<padding>

它定义了与包含形状的View元素相适应的边距(这个边距是View对象内容的位置,而不是形状的位置)。

      属性(ATTRIBUTES):

        android:left

      尺寸值,它用尺寸值或尺寸资源定义了左边距。

        android:top

      尺寸值,它用尺寸值或尺寸资源定义了上边距。

        android:right

      尺寸值,它用尺寸值或尺寸资源定义了右边距。

        android:bottom

      尺寸值,它用尺寸值或尺寸资源定义了下边距。

 <size>

它定义了几何形状的大小。

      属性(ATTRIBUTES):

        android:height

       尺寸值,它用尺寸值或尺寸资源定义了几何形状的高度。

       android:width

     尺寸值,它用尺寸值或尺寸资源定义了几何形状的宽度。

注意:默认情况下,几何形状定义的尺寸会被缩放到与它的容器相适应的尺寸。在ImageView对象中使用几何形状时,能够通过把android:scaleType属性设置为center来限制缩放。

<solid>

定义填充几何形状的实体颜色。

      属性(ATTRIBUTES):

        android:color

       颜色值。它指定应用与几何形状的颜色值。用十六进制的颜色值或颜色资源来表示。

<stroke>

给形状定义一个虚线。

      属性(ATTRIBUTES):

        android:width

        尺寸值。它指定了线的厚度,用尺寸值或尺寸资源来表示。

        android:color

        颜色值。它指定了线的颜色,用十六进制的颜色值或颜色资源来表示。

        android:dashGap

        尺寸值,它定义了破折线之间的距离,用尺寸值或尺寸资源来表示。只有设置了android:dashWidth属性时,这个属性才有效。

        android:dashWidth

        尺寸值,它定义了每个破折线的尺寸,用尺寸值或尺寸资源来表示。只有设置了android:dashGap属性时,这个属性才有效。

例子(EXAMPLE):

XML文件被保存在res/drawable/gradient_box.xml

<?xml version="1.0" encoding="utf-8"?>
<shapexmlns:android="http://schemas.android.com/apk/res/android"
   
android:shape="rectangle">
   
<gradient
       
android:startColor="#FFFF0000"
       
android:endColor="#80FF00FF"
       
android:angle="45"/>
   
<paddingandroid:left="7dp"
       
android:top="7dp"
       
android:right="7dp"
       
android:bottom="7dp"/>
   
<cornersandroid:radius="8dp"/>
</shape>

以下是布局XML把这个形状资源应用于一个View元素的方法:

<TextView
   
android:background="@drawable/gradient_box"
   
android:layout_height="wrap_content"
   
android:layout_width="wrap_content"/>

以下是代码获取形状资源,并把其应用于View对象的方法:

Resources res =getResources();
Drawable shape = res.getDrawable(R.drawable.gradient_box);

TextView tv =(TextView)findViewByID(R.id.textview);
tv
.setBackground(shape);

 

posted @ 2012-04-25 09:06  andriod2012  阅读(988)  评论(1编辑  收藏  举报