Shape 自定义控件的形状

时间:2021-06-15 03:55:51
一  基础知识    (1) 操作步骤
        ① 

新建shape文件


              首先在res/drawable文件夹下,新建一个文件,命名为:shape_radius.xml

          ②  

添加到控件中

              在定义好shape文件后,下一步就是将其添加到控件中,添加到控件中,一般是使用设置background属性,将其为控件背景,根标签修改为shape就可以啦



     (2)属性介绍


           ① corners :定义圆角        <corners    //定义圆角       android:radius="dimension"      //全部的圆角半径       android:topLeftRadius="dimension"   //左上角的圆角半径       android:topRightRadius="dimension"  //右上角的圆角半径       android:bottomLeftRadius="dimension"    //左下角的圆角半径       android:bottomRightRadius="dimension" />    //右下角的圆角半径                注意: radius:定义四个角的的圆角半径,与其他四个不可以公用
            ② solid用以指定内部填充色                 <solid android:color="#ffff00"
    ③ gradient:用以定义渐变色,可以定义两色渐变和三色渐变,及渐变样式             
  1. <gradient   
  2.     android:type=["linear" | "radial" | "sweep"]    //共有3中渐变类型,线性渐变(默认)/放射渐变/扫描式渐变    
  3.     android:angle="integer"     //渐变角度,必须为45的倍数,0为从左到右,90为从上到下    
  4.     android:centerX="float"     //渐变中心X的相当位置,范围为0~1    
  5.     android:centerY="float"     //渐变中心Y的相当位置,范围为0~1    
  6.     android:startColor="color"   //渐变开始点的颜色    
  7.     android:centerColor="color"  //渐变中间点的颜色,在开始与结束点之间    
  8.     android:endColor="color"    //渐变结束点的颜色    
  9.     android:gradientRadius="float"  //渐变的半径,只有当渐变类型为radial时才能使用    
  10.     android:useLevel=["true" | "false"] />  //使用LevelListDrawable时就要设置为true。设为false时才有渐变效果    

注意: android:angle="integer"     只对线性渐变有用          android:centerX="float"    只对放射渐变有关         android:gradientRadius="float"  //渐变的半径,只有当渐变类型为radial时才能使用 
        线性渐变
  1. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.     <gradient   
  3.         android:type="linear"  
  4.         android:startColor="#ff0000"  
  5.         android:centerColor="#00ff00"  
  6.         android:endColor="#0000ff"  
  7.         android:angle="45"/>  
  8. </shape> 

        扫描渐变     
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <gradient   
  4.         android:type="sweep"  
  5.         android:startColor="#ff0000"  
  6.         android:centerColor="#00ff00"  
  7.         android:endColor="#0000ff"  
  8.         android:centerX="0.2"  
  9.         android:centerY="0.8"/>  
  10. </shape> 


注意:centerX、centerY两个属性用于设置渐变的中心点位置渐变类型为扫描渐变,类型为分数或小数,不接受Dimension。默认值是0.5(也就是渐变控件的中心位置),有效值是0.0~1.0,超出该范围后会看不出渐变效果。centerX、centerY的取值其实是宽和高的百分比

   ④ stroke:描边属性,可以定义描边的宽度,颜色,虚实线等,它是占用原本控件的宽和高
  1. <stroke         
  2.     android:width="dimension"   //描边的宽度    
  3.     android:color="color"   //描边的颜色    
  4.     // 以下两个属性设置虚线    
  5.     android:dashWidth="dimension"   //虚线的宽度,值为0时是实线    
  6.     android:dashGap="dimension" />      //虚线的间隔   
<stroke
android:width="20dp"
android:color="#00ff00"
android:dashWidth="10dp"
android:dashGap="1dp" />

注意:里面的单位是dp或者其他的,必须写单位

    ⑤ Shape的属性(rectangle、oval、line、ring)
  1. android:shape=["rectangle" | "oval" | "line" | "ring"]    
  2. shape的形状,默认为矩形,可以设置为矩形(rectangle)、椭圆形(oval)、线性形状(line)、环形(ring)    
  3. 下面的属性只有在android:shape="ring时可用:    
  4. android:innerRadius         尺寸,内环的半径。    
  5. android:innerRadiusRatio    浮点型,以环的宽度比率来表示内环的半径,    
  6. android:thickness           尺寸,环的厚度    
  7. android:thicknessRatio      浮点型,以环的宽度比率来表示环的厚度,例如,如果android:thicknessRatio="2",    
  8. android:useLevel            boolean值,如果当做是LevelListDrawable使用时值为true,否则为false.


案例:
  1. <shape xmlns:android="http://schemas.android.com/apk/res/android"   
  2.     android:shape="rectangle">  
  3.     <solid android:color="#ff00ff"/>  
  4. </shape> 

注意:是放在shape的标签里面