android xml实现控件边框阴影渐变效果

实现原理:使用两块画布重叠,上面画布小于下面画布,下面画布渐变

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--阴影-->
    <item
        android:left="2dp"
        android:top="2dp"
        android:right="2dp"
        android:bottom="2dp"
        >
        <shape android:shape="rectangle">
            <gradient
                android:angle="270"
                android:endColor="#f5f5f5"
                android:startColor="#ffffff"/>

            <corners
                android:bottomLeftRadius="2dp"
                android:bottomRightRadius="2dp"
                android:topLeftRadius="2dp"
                android:topRightRadius="2dp"/>
        </shape>
    </item>
    <!--阴影-->

    <!--白色背景-->
    <item
        android:left="3dp"
        android:top="3dp"
        android:bottom="5dp"
        android:right="3dp">

        <shape android:shape="rectangle">
            <gradient
                android:angle="270"
                android:endColor="#FFFFFF"
                android:startColor="#FFFFFF"/>

            <corners
                android:bottomLeftRadius="2dp"
                android:bottomRightRadius="2dp"
                android:topLeftRadius="2dp"
                android:topRightRadius="2dp"/>
        </shape>
    </item>

</layer-list>

  • shape 的属性 (rectangle:矩形;line:线性;oval:椭圆;ring:环形),默认为矩形

  • corners 边角弧度 必须是在shape=rectangle的时候,corners才有效

  • solid 用以指定内部填充色

  • gradient //定义渐变色,可以定义两色渐变和三色渐变,及渐变样式

       linear(线性渐变)、radial(放射性渐变)、sweep(扫描式渐变), 在构造放射性渐变时,要加上android:gradientRadius属性(渐变半径),即必须指定渐变半径的大小才会起作用。
      
       <gradient      
             android:type=["linear" | "radial" | "sweep"]    //共有3中渐变类型   
    
             android:angle="integer"     //渐变角度,必须为45的倍数,0为从左到右,90为从上到下    
    
             android:centerX="float"     //渐变中心X的相当位置,范围为0~1      
    
             android:centerY="float"     //渐变中心Y的相当位置,范围为0~1     
    
             android:startColor="color"   //渐变开始点的颜色     
    
             android:centerColor="color"  //渐变中间点的颜色,在开始与结束点之间    
    
             android:endColor="color"    //渐变结束点的颜色     
    
             android:gradientRadius="float"  //渐变的半径,只有当渐变类型为radial时才有效     
    
  • stroke 这是描边属性,可以定义描边的宽度,颜色,虚实线等

    <stroke 
              android:width="dimension"   //描边的宽度      
    
              android:color="color"   //描边的颜色    // 以下两个属性设置虚线    
    
              android:dashWidth="dimension"   //虚线的宽度,值为0时是实线   
    
              android:dashGap="dimension" />    
    

猜你喜欢

转载自blog.csdn.net/ch847808805/article/details/85001283