android shape.xml 属性详解

转载源:http://blog.csdn.net/harvic880925/article/details/41850723

一、简单使用

刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标签怎么用。

1、新建shape文件

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

内容是这样的:(先不需要理解,先看shape怎么用)

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <corners android:radius="20dip"/>  
  4.     <solid android:color="#ff00ff"/>  
  5.   
  6. </shape>  

2、添加到控件中

在定义好shape文件后,下一步就是将其添加到控件中,添加到控件中,一般是使用设置background属性,将其为控件背景,下面,我们将其设置为MainActivity对应的布局中(activity_main.xml),将其设为TextView的背景,看显示出来 是什么样子的。

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context="com.harvic.tryshape.MainActivity" >  
  6.   
  7.     <TextView  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_margin="50dip"  
  11.         android:text="@string/hello_world"   
  12.         android:background="@drawable/shape_radius"/>  
  13.       
  14. </RelativeLayout>  

显示出来的结果是这样的:



二、基本属性(corners、gradient、padding、size、solid、stroke)

上面给大家简单的讲了下shape标签组的简单使用方法,下面就具体讲讲shape标签里所具有的几个子标签及所具有的属性。

1、Corners

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <corners    //定义圆角    
  2.     android:radius="dimension"      //全部的圆角半径    
  3.     android:topLeftRadius="dimension"   //左上角的圆角半径    
  4.     android:topRightRadius="dimension"  //右上角的圆角半径    
  5.     android:bottomLeftRadius="dimension"    //左下角的圆角半径    
  6.     android:bottomRightRadius="dimension" />    //右下角的圆角半径    

Corners标签是用来字义圆角的,其中radius与其它四个并不能共同使用。

Android:radius:定义四个角的的圆角半径。

其它四个是逐个字义每个角的圆角半径。

使用:

控件布局:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent" >  
  4.   
  5.     <TextView  
  6.         android:layout_width="100dp"  
  7.         android:layout_height="100dp"  
  8.         android:layout_margin="50dip"  
  9.         android:text="@string/hello_world"   
  10.         android:background="@drawable/shape_radius"/>  
  11.  </RelativeLayout>  

shape定义:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <corners android:radius="20dip"/>  
  4.     <solid android:color="#ffff00"/>  
  5. </shape>  

效果:



2、solid

solid用以指定内部填充色

只有一个属性:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <solid  android:color="color" />    

在上面的例子中,我们就将填充色指定为#ffff00了,如果我们不加圆角,只使用填充色,即将shape变成这样子:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <solid android:color="#ffff00"/>  
  4. </shape>  

那效果就是这样的:



3、gradient

gradient用以定义渐变色,可以定义两色渐变和三色渐变,及渐变样式,它的属性有下面几个:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  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时才有渐变效果    

首先有三种渐变类型,分别是:linear(线性渐变)、radial(放射性渐变)、sweep(扫描式渐变)

(1)先看看这几个属性的使用方法:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. android:type=["linear" | "radial" | "sweep"]  
  2. android:startColor="color"   //渐变开始点的颜色    
  3. android:centerColor="color"  //渐变中间点的颜色,在开始与结束点之间    
  4. android:endColor="color"    //渐变结束点的颜色    
  5. android:gradientRadius="float"  //渐变的半径,只有当渐变类型为radial时才能使用    

下面我们使用三色渐变来看看这三种渐变方式都是怎么显示的:(如果不使用centerColor属性就是双色渐变,这个属性是可选的)


需要注意的一点是,在构造放射性渐变时,要加上android:gradientRadius属性(渐变半径),即必须指定渐变半径的大小才会起作用,下面列出这三个渐变方式的shape代码,供大家参考:

线性渐变:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <gradient   
  4.         android:type="linear"  
  5.         android:startColor="#ff0000"  
  6.         android:centerColor="#00ff00"  
  7.         android:endColor="#0000ff"/>  
  8. </shape>  

放射性渐变:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <gradient   
  4.         android:type="radial"  
  5.         android:startColor="#ff0000"  
  6.         android:centerColor="#00ff00"  
  7.         android:endColor="#0000ff"  
  8.         android:gradientRadius="100"/>  
  9. </shape>  

扫描式渐变:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  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. </shape>  

可见放射性渐变,只是比其它两个多了个android:gradientRadius属性

(2)、android:angle属性(仅对线性渐变有效)

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. android:angle="integer"     //渐变角度,必须为45的倍数,0为从左到右,90为从上到下    

我们在上面的三种渐变上都加上angle属性,看看效果如何:


能过跟上一个图对比可以发现,angle属性确实只对线性渐变有效,其它两种渐变方式都没有任何动静,下面是此时的线性渐变shape代码:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <gradient   
  4.         android:type="linear"  
  5.         android:startColor="#ff0000"  
  6.         android:centerColor="#00ff00"  
  7.         android:endColor="#0000ff"  
  8.         android:angle="45"/>  
  9. </shape>  

(3)、android:centerX与android:centerY

centerX、centerY两个属性用于设置渐变的中心点位置,仅当渐变类型为放射渐变时有效,类型为分数或小数,不接受Dimension。默认值是0.5,有效值是0.0~1.0,超出该范围后会看不出渐变效果。centerX、centerY的取值其实是宽和高的百分比;不难理解,下面看代码:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  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>  

取宽度的20%和高度的80%的位置,作为新的渐变原点,效果是这样的:


(4)android:useLevel

useLevel属性通常不使用。该属性用于指定是否将该shape当成一个LevelListDrawable来使用,默认值为false。

4、stroke

这是描边属性,可以定义描边的宽度,颜色,虚实线等

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <stroke         
  2.     android:width="dimension"   //描边的宽度    
  3.     android:color="color"   //描边的颜色    
  4.     // 以下两个属性设置虚线    
  5.     android:dashWidth="dimension"   //虚线的宽度,值为0时是实线    
  6.     android:dashGap="dimension" />      //虚线的间隔   

上面各个属性的意义如下:

我们使用绿色虚线描边,虚线高度是20dp,虚线宽度为10dp虚线间距为1dp:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <stroke   
  4.         android:width="20dp"   
  5.         android:color="#00ff00"  
  6.         android:dashWidth="10dp"  
  7.         android:dashGap="1dp" />  
  8. </shape>  

从效果图中,我们也能清晰的看出这三个参数(width、dashwidth、dashGap)之间的区别:

5、size和padding

这两个基本上不怎么用,因为他们所具有的功能,控件本身也能实现。
size:是用来定义图形的大小的。

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <size    
  2.     android:width="dimension"    
  3.     android:height="dimension" />  

padding:用来定义内部边距

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <padding     
  2.     android:left="dimension"    
  3.     android:top="dimension"    
  4.     android:right="dimension"    
  5.     android:bottom="dimension" />  

 

三、Shape的属性(rectangle、oval、line、ring)

上面我们讲了Shape的子标签的的作用,但Shape本身还没讲,Shape自已是可以定义当前Shape的形状的,比如上面的矩形,还有椭圆形,线形和环形;这些都是通过Shape标签的 shape属性来定义的,Shape标签总共有下面几个属性,我们一个个讲:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  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.   

可见,只有第一个shape是可用的,其它五个都是shape等于ring时所特有的。

注意,无论这里shape取什么形状,他的子标签都是可用的,但有时并不会有效果,比如在shape为椭圆时,那corners标签就不会有效果,很显然的道理。下面一个个看看各个形状都是怎么样的;

1、rectangle (矩形)

这就是上一节我们使用的形状,当我们不指定shape属性时,默认就是矩形的。 

控件代码:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent"  
  4.     android:orientation="horizontal" >      
  5.     <TextView  
  6.         android:layout_width="300dp"  
  7.         android:layout_height="100dp"  
  8.         android:layout_margin="10dp"  
  9.         android:textColor="#ffffff"  
  10.         android:textSize="18sp"  
  11.         android:textStyle="bold"  
  12.         android:background="@drawable/try_shape_3"/>  
  13.  </LinearLayout>  

shape代码:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:shape="rectangle">  
  4.     <solid android:color="#ff00ff"/>  
  5. </shape>  

对应图形:

2、oval(椭圆)

控件代码不变,下面是shape代码:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:shape="oval">  
  4.     <solid android:color="#ff00ff"/>  
  5. </shape>  

对应图形:(控件大小的矩形所对应的椭圆)


3、line(线形)

没觉得这个能有什么用……,也不讲了,没什么意思

4、ring(环形)

还记得他所特有的几个属性么:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. android:innerRadius         尺寸,内环的半径。    
  2. android:thickness           尺寸,环的厚度    
  3. android:innerRadiusRatio    浮点型,以环的宽度比率来表示内环的半径,    
  4.       例如,如果android:innerRadiusRatio,表示内环半径等于环的宽度除以5,这个值是可以被覆盖的,默认为9.    
  5. android:thicknessRatio      浮点型,以环的宽度比率来表示环的厚度,例如,如果android:thicknessRatio="2",    
  6.       那么环的厚度就等于环的宽度除以2。这个值是可以被android:thickness覆盖的,默认值是3.    
  7. android:useLevel            boolean值,如果当做是LevelListDrawable使用时值为true,否则为false.  

这么几个属性无外乎就是定义环形的内环尺寸和环的宽度。

举个例子:

控件定义:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent"  
  4.     android:orientation="horizontal" >      
  5.     <TextView  
  6.         android:layout_width="300dp"  
  7.         android:layout_height="100dp"  
  8.         android:layout_margin="10dp"  
  9.         android:textColor="#ffffff"  
  10.         android:textSize="18sp"  
  11.         android:textStyle="bold"  
  12.         android:background="@drawable/try_shape_2"/>  
  13.  </LinearLayout>  

shape定义:(这里一定要要加上useLevel属性并定义为false,不然没有效果)

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:shape="ring"   
  4.     android:innerRadius="20dp"   
  5.     android:thickness="50dp"    
  6.     android:useLevel="false">  
  7.       
  8.     <solid android:color="#ff00ff"/>  
  9.       
  10. </shape>  

效果图:



源码地址:http://download.csdn.net/detail/harvic880925/8249629
请大家尊重原创者版权,转载请标时出处:http://blog.csdn.net/harvic880925/article/details/41850723 谢谢。

转载于:https://www.cnblogs.com/imqsl/p/6561173.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux比较大文件内容,Linux系统最大文件打开数优化,解决Too many open files报错

这是一个Linux系统常见的故障&#xff0c;网络上也能轻易的找到解决办法&#xff0c;我也只是在工作中遇到了这个问题&#xff0c;所以在博客记录下&#xff0c;以备不时之需。一、报错截图&#xff1a;图为resin的报错日志&#xff0c;很明显提示了Too many open files&#x…

Varnish缓存代理简介与配置

一、varnish原理&#xff1a;1&#xff09;Varnish简介&#xff1a;varnish缓存是web应用加速器&#xff0c;同时也作为http反向缓存代理。你可以安装varnish在任何http的前端&#xff0c;同时配置它缓存内容。与传统的 squid 相比&#xff0c;varnish 具有性能更高、速度更快、…

linux安装卸载mysql,Linux6 系列 安装、卸载mysql

Linux6 系列 安装、卸载mysqlLinux6 系列 安装、卸载mysqlLinux环境下载mysql&#xff1a;https://blog.csdn.net/weixin_40816738/article/details/90111456一、安装环境依赖&#xff1a;yum install -y cmake make gcc gcc-c libaio ncurses ncurses-devel二、安装流程1、软件…

linux14.04 Apache,Ubuntu 14.04编译安装Apache

Ubuntu下编译安装apache需要预先编译安装多个依赖件&#xff0c;包括&#xff1a;apr, apr-util,pcre,zlib-devel&#xff0c;等&#xff0c;相当麻烦&#xff0c;记录于此备查.由于Ubuntu系统默认安装时没有安装C&#xff0c;所以也需要先安装c编译需要相关的组件。[注]apt-ca…

linux dd入门,Linux基础知识:Linux中DD命令详解

1.dd命令简介功能&#xff1a;把指定的输入文件拷贝到指定的输出文件中&#xff0c;并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用dd命令把软盘上的数据写成硬盘的一个寄存文件&#xff0c;再把这个寄存文件写入第二张软盘上&#xff0c…

lcase和ucase_在SQL中使用UCASE(),LCASE()和MID()函数

lcase和ucaseUpper Case, Lower Case and MID functions are scalar functions which return a single value, based in the input value. 大写&#xff0c;小写和MID函数是标量函数&#xff0c;它们基于输入值返回单个值。 As you all know sometimes different databases ha…

linux ntp手动授时,关于我校NTP授时服务的使用说明

校园网用户&#xff1a;我中心于近期采购了GPS北斗授时服务设备&#xff0c;该设备可实现纯GPS模式、纯北斗模式和混合模式与卫星对时&#xff0c;同时实现对校内设备授时的功能。支持所有NTP协议的服务器、PC、嵌入式设备等&#xff0c;包括但不限于&#xff1a;Microsoft Win…

linux反序列化漏洞,思科多个产品Java反序列化漏洞(CVE-2015-6420)

思科多个产品Java反序列化漏洞(CVE-2015-6420)发布日期&#xff1a;2015-12-15更新日期&#xff1a;2015-12-17受影响系统&#xff1a;Cisco Unified ComputingCisco Voice and Unified Communications DevicesCisco Wireless描述&#xff1a;CVE(CAN) ID: CVE-2015-6420思科是…

密码学替代技术_替代技术及其类型| 密码学

密码学替代技术As we already discussed what are the Substitution techniques and one of its type Ceasar Cipher? So we are not discussing it here for that please refer to Cryptography: CeasarCipher here: Cryptography: Caesar Cipher and its Python Implementat…

Flask+uwsgi+Nginx环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 开源软件准备 需要的软件列表&#xff1a; setuptools-33.1.1.zip Python-2.7.13.tgz pip-9.0.1.tar.gz nginx-1.10.3.tar.gz 软件统一上传到/usr/local/src/下&#xff0c;python是使用自己编译的。Python安装 先安装以…

ofb模式_密码学中的输出反馈模式(OFB)

ofb模式This is an output feedback (OFB) mode is similar in structure to that of CFB in Cryptography. It is the output of the encryption function that is fed back to the shift register in OFB in the cryptography, whereas in CFB in the mode of blocks, the ci…

win8编程c语言,Win8系统怎么运行C语言 win8系统运行C语言的方法

C语言是一门通用计算机编程语言&#xff0c;是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言&#xff0c;但是许多win8系统用户并不知道要怎么运行C语言&#xff0c;针对这个情况&#xff0c;小编就给大家分享一…

Linux sudoers文件的写法

2019独角兽企业重金招聘Python工程师标准>>> 文件的组成 sudoers文件由三部分组成&#xff1a; sudoers的默认配置&#xff0c;主要设置sudo的一些缺省值&#xff08;本文不会对这些默认配置进行介绍&#xff0c;若有兴趣可以自己man 5 sudoers然后搜defaults)alias…

设计模式(一)单例模式的七种写法

1. 饿汉模式 public class Singleton { private static Singleton instance new Singleton(); private Singleton (){}public static Singleton getInstance() { return instance; } } View Code这种方式在类加载时就完成了初始化&#xff0c;所以类加载较慢&#xff0c;…

智能关机软件 c语言,智能关机软件

智能关机软件是一款免费共享关机软件。智能关机软件不但具有定时关机、自动关机的功能&#xff0c;而且还可以进行定时提醒信息、打开文件、打开网页、重启计算机、注销用户、锁定计算机、计算机休眠、计算机待机、关闭显示器&#xff0c;并且可以进行多任务计划&#xff0c;可…

iOS开发之解决系统数字键盘无文字时delete键无法监听的技巧

最近在做用户登录获取验证码时添加图形验证码功能&#xff0c;就是只有正确输入图形验证码才能收到后台发送的短信验证码。效果如下&#xff1a; 看起来虽然是个小功能&#xff0c;但是实际操作起来&#xff0c;会发现苹果给我们留下的坑&#xff0c;当然更多的是自己给自己挖的…

连接fiddler后手机无法显示无网络

升级了fiddler到4.6版本&#xff0c;手机设置代理后提示无网络&#xff0c;试试以下解决方法&#xff1a; 1.fiddler升级后对应的.net framework也要升级&#xff0c;安装最新的.net framework 4.6&#xff0c;升级安装后&#xff0c;可以正确抓包啦 2.如果上述方法无效&#x…

android 图片叠加xml,Android实现图片叠加效果的两种方法

本文实例讲述了Android实现图片叠加效果的两种方法。&#xff0c;具体如下&#xff1a;效果图&#xff1a;第一种&#xff1a;第二种&#xff1a;第一种是通过canvas画出来的效果:public void first(View v) {// 防止出现Immutable bitmap passed to Canvas constructor错误Bit…

Win10系列:VC++ 定时器

计时器机制俗称"心跳"&#xff0c;表示以特定的频率持续触发特定事件和执行特定程序的机制。在开发Windows应用商店应用的过程中&#xff0c;可以使用定义在Windows::UI::Xaml命名空间中的DispatcherTimer类来创建计时器。DispatcherTimer类包含了如下的成员&#xf…

dbms系统 rdbms_DBMS与传统文件系统之间的区别

dbms系统 rdbmsIntroduction 介绍 DBMS and Traditional file system have some advantages, disadvantages, applications, functions, features, components and uses. So, in this article, we will discuss these differences, advantages, disadvantages and many other …