Shape Drawable样式

原子原味:developer.android.com/guide/topics/resources/drawable-resource.html#Shape

文件位置:
res/drawable/filename.xml
引用方式:
In Java: R.drawable.filename
In XML: @[package:]drawable/filename
语法:
<?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>
节点以及节点中的属性:
<shape>根节点

属性:

xmlns:android
命名空间 "http://schemas.android.com/apk/res/android".
android:shape 形状
"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.

以下属性只有当使用了android:shape="ring"才可用来设置:

android:innerRadius
Dimension. The radius for theinner part of the ring (the hole in the middle), as a dimension value or dimension resource.
android:innerRadiusRatio
Float. The radius for the innerpart 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. Thisvalue is overridden by android:innerRadius. Default value is 9.
android:thickness
Dimension. The thickness of thering, 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", thenthe 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 asa LevelListDrawable. This should normally be "false" or your shape may not appear.
<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 eachcorner by the following attributes.
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 cornerradius greater than 1, or else no corners are rounded. If you want specific cornerstonot be rounded, a work-around is to useandroid:radius to set a default cornerradius greater than 1, but then override each and every corner with the values you reallywant, 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 isbottom to top. It must be a multiple of 45. Default is 0.
android:centerX
Float. The relative X-position for the center of the gradient (0 - 1.0).
android:centerY
Float. The relative Y-position for the center of the gradient (0 - 1.0).
android:centerColor
Color. Optional color that comes between the start and end colors, as ahexadecimal value or color resource.
android:endColor
Color. The ending color, as a hexadecimalvalue or color resource.
android:gradientRadius
Float. The radius for the gradient. Only applied when android:type="radial".
android:startColor
Color. The starting color, as a hexadecimalvalue or color resource.
android:type
Keyword. The type of gradient pattern to apply. Valid values are:
ValueDescription
"linear"A linear gradient. This is the default.
"radial"A radial gradient. The start color is the center color.
"sweep"A sweeping line gradient.
android:useLevel
Boolean. "true" if this is used as a LevelListDrawable.
<padding>
Padding to apply to the containing View element (this pads the position of the Viewcontent, 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.
<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 containerView proportionate to the dimensions defined here, by default. When you use the shape in anImageView, you can restrict scaling by setting theandroid:scaleType to"center".

<solid>
A solid color to fill the shape.

attributes:

android:color
Color. The color to apply to the shape, as a hexadecimalvalue or color resource.
<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 ahexadecimal 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.


1、  solid  
      描述:内部填充 
       属性     android:color 填充颜色 
     
     
2、size  
      描述:size: 大小 
      属性: 
      android:width   表示形状的宽度 
      android:height 表示形状的高度 
     
3、gradient 
          
       描述: 渐变色 
        
        属性: 
        android:startColor  起始颜色 
        android:endColor    结束颜色 
        android:angle       渐变角度(PS:当angle=0时,渐变色是从左向右。 然后逆时针方向转,当angle=90时为从下往上。angle必须为45的整数倍) 
        android:type       渐变类型(取值:linear、radial、sweep) 
                             linear  线性渐变,这是默认设置 
                             radial  放射性渐变,以开始色为中心。 
                             sweep   扫描线式的渐变。 
        android:centerColor  渐变中间颜色,即开始颜色与结束颜色之间的颜色 
        android:useLevel   如果要使用LevelListDrawable对象,就要设置为true。设置为true无渐变。false有渐变色 
        android:gradientRadius  渐变色半径.当 android:type="radial" 时才使用。单独使用 android:type="radial"会报错。 
        android:centerX    渐变中心X点坐标的相对位置 
        android:centerY   渐变中心Y点坐标的相对位置 
4、stroke 
     
     描述: stroke:描边  相当于html中的盒子模型的border 
             
    属性: 
         android:width 描边的宽度 
         android:color 描边的颜色 
         android:dashWidth 表示描边的样式是虚线的宽度, 
                                                              值为0时,表示为实线。值大于0则为虚线。 
         android:dashGap  表示描边为虚线时,虚线之间的间隔 即“ - - - - ” 
             
  5、corners 
      
          描述: corners: 圆角 
          
         属性: 
         android:radius  半径 

                  将手机背对自己就可以明显的出来了。。。

        android:topLeftRadius  左上角半径 
         android:topRightRadius  右上角半径
         android:bottomLeftRadius 右下角半径 
         android:bottomRightRadius 左下角半径 
  6、padding 
               
           描述:内部边距,即内容与边的距离 
               
          属性: 
         android:left  左内边距 
         android:top   上内边距 
         android:right  右内边距 
         android:bottom 下内边距 


小例子:
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>

在布局文件中使用样式:

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

布局中没有使用,在Java中使用,进行设置:

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

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

另外一个例子:

布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >

   
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_selector"
        android:text="Button" />

</LinearLayout>


选择器btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"><shape>

            <!-- 渐变 -->
            <gradient android:endColor="#FFFFFF" android:gradientRadius="50" android:startColor="#ff8c00" android:type="radial" />
            <!-- 描边 -->
            <stroke android:dashGap="3dp" android:dashWidth="5dp" android:width="2dp" android:color="#dcdcdc" />
            <!-- 圆角 -->
            <corners android:radius="2dp" />

            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape></item>
    <item android:drawable="@drawable/button_focuse" android:state_focused="true"></item>
    <item><shape>
            <solid android:color="#ff9d77" />

            <stroke android:width="2dp" android:color="#fad3cf" />

            <corners android:bottomLeftRadius="5dp" android:bottomRightRadius="0dp" android:topLeftRadius="0dp" android:topRightRadius="5dp" />

            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape></item>

</selector>

drawable资源button_focuse.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 底部圆角 白色背景 灰色边框 长方体 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <gradient
        android:angle="270"
        android:endColor="#ffc2b7"
        android:startColor="#ffc2b7" />

    <stroke
        android:width="2dp"
        android:color="#dcdcdc" />

    <corners android:radius="2dp" />

    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />

</shape>

对于选择器文件在item节点中,既可以直接添加shape,也可以将shape作为一个资源引用进去。。。。
见API中类:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值