android shape使用

宁锐
2023-12-01

shape在android开发中不是特别重要,不使用shape同样可以做出使用shape的效果。但使用shape具有许多优势。1.app瘦身,shape定义的资源要比远远小于UI设计的图片资源,虽然现在在手机上不缺少存储空间,但可以做出小而且界面丰富的应用,这对于节省用户的流量,增强网上流通,减少用户下载软件的心理压力也许有用。2.加快软件开发速度,减少团队沟通的效率损耗。这使得软件开发人员可以从自己的角度更自由更快速的调整软件的界面,修改几个字符花费的时间远小于做一幅图片并替换的时间,而且要恰当的为UI描述清楚一些极微小的颜色改变对软件的影响相当的困难。在屏幕尺寸和分辨率多变的情况下,shape的优势相当明显。3.由于android的开源特性,图片的资源的创意很容易被别人获取和模仿。有很多应用在使用shape,在扁平化的UI世界里,也许shape的优势会更加的明显,对于一些界面友好无法成功反编译程序来说,分析他的图片来了解相关技术细节有时是可行的,但如果使用shape,将有可能使用研究者十分沮丧,他连一张可利用的资源图片都看不到。

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] > --- 默认为rectangle
    <corners -- shape=“rectangle”时使用,
        android:radius="integer" -- 半径,会被下边的属性覆盖,默认为1dp,
        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 -- 指定大小,一般用在imageview配合scaleType属性使用。大小一般会适配滴
        android:width="integer"
        android:height="integer" />
    <solid -- 填充颜色,可是是十六进制颜色。(比如想设置半透明效果,直接使用十六就只就OK)
        android:color="color" />
    <stroke -- 指定边框,border,dashWidth和dashGap有一个为0dp则为
        android:width="integer"
        android:color="color"
        android:dashWidth="integer" -- 虚线宽度
        android:dashGap="integer" /> -- 虚线间隔宽度
</shape>
<corners>
1、android:radius,圆角半 径,会被下边的单个角度半径属性覆盖,默认为1dp,值越大,看起来越圆
2、在使用时,如果单独设置四个角度,又大小不一致时,eclipse的graphics preview会报错。但是直接真机运行即可。(比如实线上边直角,下边屈角的效果)

<size>
大小
gradient  
solid:实心,就是填充的意思,实心图形闭合区域内部的颜色
android:color指定填充的颜色
gradient:渐变
android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度, 必须为45的整数倍
另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。 sweep为扫描渐变,比较复杂,类似环形,中心从第一象限0度到360度的 变化

stroke:描边,闭合区域边界线的颜色宽高,即边框
android:width="2dp" 描边的宽度,android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth="5dp" 
android:dashGap="3dp"
其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。

padding 填充色与边界的距离
<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
     <!-- 填充 -->
    <solid
        android:color="#B2B2B2"
        /> 
        
    <!-- 大小 -->
    <size
        android:width="200dp"
        android:height="50dp"
        />  
     
     <!-- 渐变色 -->
    <gradient
        android:startColor="#DBDCDD"
        android:endColor="#B8B9BB"
        android:centerColor="#ADADAF"
        android:angle="270" 
        /> 
      
         
    <!-- 描边 -->
    <stroke
        android:width="2dp"
        android:color="#3D4148" 
        />  
             
    <!-- 圆角 -->
    <corners 
       android:radius="5dp" 
        /> 
      
    <padding
        android:left="10dp"
        android:top="10dp"
        android:right="10dp"
        android:bottom="10dp"
        /> 
     
</shape> 
     
<!--  
     
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 下内边距 
 -->


参考:
http://blog.csdn.net/rflyee/article/details/20785495
http://blog.csdn.net/chengyingzhilian/article/details/7340858

http://tech.ddvip.com/2012-10/1351226528184208.html

 类似资料: