ShapeDrawable的应用


ShapeDrawable
Class Overview
    A Drawable object that draws primitive shapes. A ShapeDrawable takes a Shape object and manages its presence on the screen. 
If no Shape is given, then the ShapeDrawable will default to a RectShape.
    It can be defined in an XML file with the <shape> element. 
file location:
    res/drawable/filename.xml
    The filename is used as the resource ID.
compiled resource datatype:
    Resource pointer to a ShapeDrawable.
resource reference:
    In Java: R.drawable.filename
    In 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:usesLevel=["true" | "false"] />
        <padding
            android:left="integer"
            android:top="integer"
            android:right="integer"
            android:bottom="integer" />
        <size
            android:width="integer"
            android:height="integer" />
注意文档中的关于size的语法有笔误,这里已经做了更正
        <solid
            android:color="color" />
        <stroke
            android:width="integer"
            android:color="color"
            android:dashWidth="integer"
            android:dashGap="integer" />
    </shape>
elements:


    <shape>
        The shape drawable. This must be the root element.


        attributes:


        xmlns:android
            String. Required. Defines the XML namespace, which must be "http://schemas.android.com/apk/res/android". 
            &#185;&#822;¨&#181;&#162;http://schemas.android.com/apk/res/android"
        android:shape
            Keyword. Defines the type of shape. Valid values are:
            Value    Desciption
            "rectangle"     A rectangle that fills the containing View. This is the default shape.
            "oval"     An oval shape that fits the dimensions of the containing View.
            "line"     A horizontal line that spans the width of the containing View. 
            This shape requires the <stroke> element to define the width of the line.
            "ring"     A ring shape.
矩形"rectangle",椭圆"oval",线"line"和"ring"&#187;·&#161;&#163;
矩形"rectangle"的使用见实例1,2,3,4
椭圆的使用见实例5
当是线的时候"line"一定要定义<stroke> element
当是线的时候<size>也就没意义了
线"line"的使用见实例6
        The following attributes are used only when android:shape="ring":
下面的属性只有在android:shape="ring"时才在有意义
        android:innerRadius
            Dimension. The radius for the inner part of the ring (the hole in the middle),
            as a dimension value or dimension resource.
        android:innerRadiusRatio
            Float. The radius for the inner part of the ring, expressed as a ratio of the ring's width.
             For instance, if android:innerRadiusRatio="5", then the inner radius equals the ring's width divided by 5. 
             This value is overridden by android:innerRadius. Default value is 9.
        android:thickness
            Dimension. The thickness of the ring, as a dimension value or dimension resource.
        android:thicknessRatio
            Float. The thickness of the ring, expressed as a ratio of the ring's width. 
            For instance, if android:thicknessRatio="2", then the thickness equals the ring's width divided by 2. 
            This value is overridden by android:innerRadius. Default value is 3.
        android:useLevel
            Boolean. "true" if this is used as a LevelListDrawable. This should normally be "false" or your shape may not appear.
下面的属性只有android:shape="rectangle"&#178;才有意义
    <corners>
        Creates rounded corners for the shape. Applies only when the shape is a rectangle.


        attributes:


        android:radius
            Dimension. The radius for all corners, as a dimension value or dimension resource. 
            This is overridden for each corner by the following attributes.
默认情况下四个角的半径,如果为0则表示直角
        android:topLeftRadius
            Dimension. The radius for the top-left corner, as a dimension value or dimension resource.
左上角的半径
        android:topRightRadius
            Dimension. The radius for the top-right corner, as a dimension value or dimension resource.
右上角的半径
        android:bottomLeftRadius
            Dimension. The radius for the bottom-left corner, as a dimension value or dimension resource.
左下角的半径
        android:bottomRightRadius
            Dimension. The radius for the bottom-right corner, as a dimension value or dimension resource.
右下角的半径
        Note: Every corner must (initially) be provided a corner radius greater than 1, or else no corners are rounded. 
        If you want specific corners to not be rounded, a work-around is to use android:radius to 
        set a default corner radius greater than 1, but then override each and every corner with the values you really want, 
        providing zero ("0dp") where you don't want rounded corners.
    <gradient>
        Specifies a gradient color for the shape.


        attributes:


        android:angle
            Integer. The angle for the gradient, in degrees. 0 is left to right, 90 is bottom to top.
            It must be a multiple of 45. Default is 0.
                        颜色的变化方式,0表示从左到右,90表示从下到上,45表示在从左到右和从下到上同时进行
                        发现该属性只有android:type="linear"才有用。
        android:centerX
            Float. The relative X-position for the center of the gradient (0 - 1.0). Does not apply when android:type="linear".
                中心点在x方向上的值,其值为0-1.0
                其x=x0+(x1-x0)*centerX.
                当android:type="linear"时没有意义
        android:centerY
            Float. The relative Y-position for the center of the gradient (0 - 1.0). Does not apply when android:type="linear".
                中间点在y方向上的值,其值为0-1.0
                其y=y0+(y1-y0)*centerY.
                当ndroid:type="linear"时没有意义
        android:centerColor
            Color. Optional color that comes between the start and end colors, as a hexadecimal value or color resource.
       中间点的Color
        android:endColor
            Color. The ending color, as a hexadecimal value or color resource.
        终点的gradient颜色
        android:gradientRadius
            Float. The radius for the gradient. Only applied when android:type="radial".
        中心园的半径,只有当android:type="radial"时有意义
        android:startColor
            Color. The starting color, as a hexadecimal value or color resource.
        起始点gradient的颜色
        android:type
            Keyword. The type of gradient pattern to apply. Valid values are:
            Value    Description
            "linear"     A linear gradient. This is the default.
            "radial"     A radial gradient. The start color is the center color.
            "sweep"     A sweeping line gradient.
         gradient的类型
         "linear"    线性
         "radial"    发射性
         这时gradient有两个或三个颜色值
         startColor 中心区域的颜色
         centerColo中心区域的外环区域(中间)的颜色。它是可选的。
         endColor其他区域颜色
         "radial"发射性的使用见实例1
          "sweep"     A sweeping line gradient.
          &#1467;startColor和endColor的使用见实例2
          &#1467;&#1296;startColor,centerColo和endColor的使用见实例2
        android:useLevel
            Boolean. "true" if this is used as a LevelListDrawable.
            当为LevelListDrawable时其值为true否则为false


    <padding>
        Padding to apply to the containing View element (this pads the position of the View content, not the shape).


        attributes:


        android:left
            Dimension. Left padding, as a dimension value or dimension resource.
        android:top
            Dimension. Top padding, as a dimension value or dimension resource.
        android:right
            Dimension. Right padding, as a dimension value or dimension resource.
        android:bottom
            Dimension. Bottom padding, as a dimension value or dimension resource.
            ShapeDrawable的content区域的Padding。
            ShapeDrawable的content区域用于确定他所在控件的content(通常是文本)的区域
    <size>
        The size of the shape.


        attributes:


        android:height
            Dimension. The height of the shape, as a dimension value or dimension resource.
        android:width
            Dimension. The width of the shape, as a dimension value or dimension resource.


        Note: The shape scales to the size of the container View proportionate to the dimensions defined here, by default.
        When you use the shape in an ImageView, you can restrict scaling by setting the android:scaleType to "center".
    ShapeDrawable的大小
    注意:当是线的时候<size>也就没意义了。
    <solid>
        A solid color to fill the shape.


        attributes:


        android:color
            Color. The color to apply to the shape, as a hexadecimal value or color resource.
        <solid>用(a hexadecimal value or color resource)来填充ShapeDrawable,这时gradient属性无意义
    <stroke>
        A stroke line for the shape.


        attributes:


        android:width
            Dimension. The thickness of the line, as a dimension value or dimension resource.
        android:color
            Color. The color of the line, as a hexadecimal value or color resource.
        android:dashGap
            Dimension. The distance between line dashes, as a dimension value or dimension resource. Only valid if android:dashWidth is set.
        android:dashWidth
            Dimension. The size of each dash line, as a dimension value or dimension resource. Only valid if android:dashGap is set.
android:width表示边框线的宽度
android:color表示边框的颜色
android:dashGap表示dash线之间的宽度
android:dashWidth表示dash线的宽度
注意:当android:shape="line"时必须定义<stroke>。这时ShapeDrawable的边框就只有一个边(line).
其使用见实例4


example:
    XML file saved at res/drawable/gradient_box.xml:


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


    This layout XML applies the shape drawable to a View:


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


    This application code gets the shape drawable and applies it to a View:


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


    TextView tv = (TextView)findViewByID(R.id.textview);
    tv.setBackground(shape);
实例1:
drawable下的gradient_box.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient 
        android:startColor="#FF0000FF" 
         android:centerColor="#FF00FF00"
        android:endColor="#FFFF0000"
        android:type="radial"
        android:gradientRadius="100"
        android:angle="90"/>
    <padding android:left="0dp" 
        android:top="0dp"
        android:right="0dp" 
        android:bottom="0dp" />
    <corners android:radius="0dp" android:topLeftRadius="0dp"/>
</shape>
实例2
drawable下的gradient_box.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient 
        android:startColor="#FF0000FF" 
        android:endColor="#FFFF0000"
        android:type="sweep"
        android:angle="90"/>
    <padding android:left="0dp" 
        android:top="0dp"
        android:right="0dp" 
        android:bottom="0dp" />
    <corners android:radius="80dp" android:topLeftRadius="10dp"/>
</shape>
实例3
drawable下的gradient_box.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient 
        android:startColor="#FF0000FF" 
         android:centerColor="#FF00FF00"
        android:endColor="#FFFF0000"
        android:type="sweep"
        android:angle="90"/>
    <padding android:left="0dp" 
        android:top="0dp"
        android:right="0dp" 
        android:bottom="0dp" />
    <corners android:radius="80dp" android:topLeftRadius="10dp"/>
</shape>
实例4
stroke的使用
drawable下的gradient_box.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient 
        android:startColor="#FF0000FF" 
         android:centerColor="#FF00FF00"
        android:endColor="#FFFF0000"
        android:type="radial"
        android:gradientRadius="100"/>
    <padding android:left="0dp" 
        android:top="0dp"
        android:right="0dp" 
        android:bottom="0dp" />
    <corners android:radius="10dp" android:topLeftRadius="0dp"/>
        <size
        android:width="150dp"
        android:height="150dp" />
        <stroke
            android:width="20dp"
            android:color="#FF0000FF"
            android:dashWidth="1dp"
            android:dashGap="1dp" />
</shape>
实例5
椭圆
drawable下的gradient_box.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <gradient 
        android:startColor="#FF0000FF" 
        android:centerColor="#FF00FF00"
        android:endColor="#FFFF0000"
        android:type="radial"
        android:gradientRadius="100"/>
    <padding android:left="0dp" 
        android:top="0dp"
        android:right="0dp" 
        android:bottom="0dp" />
</shape>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值