日常开发中,我们会遇到一些Button、Textview...等控件的背景是圆角矩形、圆形...等,和android默认的控件背景矩形不一致,此时shape的作用就体现出来了,我们可以根据shape属性画出很多我们意想不到的背景图案,下面我会把所有shape的属性都介绍一下。本文参考子 http://keeganlee.me/post/android/20150830。

1  shape标签:

    android:shape

      rectangle: 矩形,默认的形状,可以画出直角矩形、圆角矩形、弧形等

      oval: 椭圆形,用得比较多的是画正圆

      line: 线形,可以画实线和虚线

      ring: 环形,可以画环形进度条

    android:tint:给shape着色

    android:tintMode:着色模式(有关tint和tintMode请参看文章:http://blog.csdn.net/u010687392/article/details/47399719)

    android:dither:将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为“false”时则停用抖动。默认值为 true。

    android:visible:暂时还不清楚控制什么隐藏。

      android:useLevel:如果为true,则可在LevelListDrawable中使用。这通常应为“false”,否则形状不会显示。

    android:thickness:环的厚度,指内环与外环的环间距。(只适用于shape为ring)

    android:thicknessRatio:浮点型,以环的宽度比率来表示环的厚度,默认为9,表示环的厚度为环的宽度除以9,该值会被android:thickness覆盖(只适用于shape为ring)

     android:innerRatio:内环半径(只适用于shape为ring)

    android:innerRadiusRatio:浮点型,以环的宽度比率来表示内环的半径,默认为3,表示内环半径为环的宽度除以3,该值会被android:innerRadius覆盖(只适用于shape为ring)

2  shape下size标签:设置shape宽高值

    android:height:高度

    android:width:宽度

    注意事项:只有控件宽高设置成wrap_content时,此处宽高才起作用,但是起到的却是最小宽高值。也就是说,当控件宽高超过你此处指定的值时,它会变化(wrap_content!!!)

   

3  shape下solid标签:设置形状填充颜色

    android:color:指定色值

    

4  shape下padding标签:设置内容与边界的距离

    android:left:左内边距

    android:top:上内边距

    android:right:右内边距

    android:bottom:左内边距

5  shape下corners标签:设置四个角的圆角

    android:radius:       四个角圆角

    android:topLeftRadius:   左上角的圆角

    android:topRightRadius:   右上角的圆角

    android:bottomLeftRadius:  左下角的圆角

    android:bottomRightRadiusleft:右下角的圆角

    注意事项:radius属性值可以被其他四个属性覆盖。

6  shape下stroke标签:设置shape的外边界线

    android:color:     边界线的颜色

    android:width:    边界线的宽度      

    android:dashWidth:  段虚线的宽度(可以将边界线理解成一段段线无间隔的连接)

    android:dashGap:   段虚线的间隔

7  shape下的gradient标签:设置形状渐变

    android:type:渐变的类型

      linear:线性渐变,默认的渐变类型

      radial:放射渐变,设置该项时,必须设置android:gradientRadius渐变半径属性

      sweep:扫描性渐变                            

    android:angle:渐变的角度,线性渐变时(linear也是默认的渐变类型)才有效,必须是45的倍数,0表示从左到右,90表示从下到上    

    android:centerX:渐变中心的相对X坐标,放射渐变时(radial)才有效,在0.0到1.0之间,默认为0.5,表示在正中间  

    android:centerY:渐变中心的相对X坐标,放射渐变时(radial才有效,在0.0到1.0之间,默认为0.5,表示在正中间

    android:useLevel:如果为true,则可在LevelListDrawable中使用。这通常应为“false”,否则形状不会显示。

    android:startColor:渐变开始的颜色

    android:centerColor:渐变中间的颜色

    android:endColor:渐变结束的颜色

    android:gradientRadius:渐变的半径,只有渐变类型为radial时才使用

  至此,所有有关shape属性以及子标签的属性全部介绍完毕。

  下面让我们看一下,实际应用时候的注意事项

  画虚线时,有几点特性必须要知道的:

    1. 只能画水平线,画不了竖线;
    2. 线的高度是通过stroke的android:width属性设置的;
    3. size的android:height属性定义的是整个形状区域的高度;(前提是控件view没有设置layout_height属性值,即为wrap_content)
    4. size的height必须大于stroke的width,否则,线无法显示;(与3同前提,否则就是size的height必须大于控件的height)
    5. 线在整个形状区域中是居中显示的;
    6. 线左右两边会留有空白间距,线越粗,与stroke的dashWidth的值相关。
    7. 引用虚线的view必须添加属性android:layerType,值设为"software",否则显示不了虚线。

  画圆环时,有几点特性必须要知道的:

     1.必须在shape根标签下指定shape的类型为ring。

       2.默认情况下,innerRadiusRatio值为3,thicknessRatio值为9,但是这两个比率可以分别被innerRadius、thickness覆盖。

       3.默认情况下,圆环内径是圆环厚度的三倍。

       4.当只指定了圆环内径或者圆环厚度其中的任何一个属性时,两者之间的3倍关系都将不在存在,另一个属性仍会用默认情况下的值。(画圆环必须同时指定圆环内径和圆环厚度)

       5.当同时指定了圆环内径和圆环厚度时,那么这两者默认的3倍关系将不存在了,而是按照你指定的属性值画圆环。

  如果想看使用的效果图,请参看以下文章:

    1  http://keeganlee.me/post/android/20150830

    2  http://blog.csdn.net/rflyee/article/details/20785495

Android开发之Shape详细解读的更多相关文章

  1. Android开发之 shape的使用

    android shape的使用 shape用于设定形状,能够在selector,layout等里面使用,有6个子标签,各属性例如以下: <?xml version="1.0" ...

  2. android开发之shape详解

    很多时候,使用shape能够实现的效果,你用一张图片也能够实现,但问题是一张图片无论你怎么压缩,它都不可能比一个xml文件小,因此,为了获得一个高性能的手机App,我们在开发中应该遵循这样一个原则:能 ...

  3. Android开发之PopupWindow

      /* *  Android开发之PopupWindow * *  Created on: 2011-8-8 *  Author: blueeagle *  Email: liujiaxiang@g ...

  4. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  5. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  6. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  7. Android开发之旅5:应用程序基础及组件

    引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...

  8. Android开发之旅4:应用程序基础及组件

    引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...

  9. Android开发之旅3:android架构

    引言 通过前面两篇: Android 开发之旅:环境搭建及HelloWorld Android 开发之旅:HelloWorld项目的目录结构 我们对android有了个大致的了解,知道如何搭建andr ...

随机推荐

  1. 响应式web网站设计制作方法

    在研究响应式的时候,记录了一些感想,分享出来,抛砖引玉,希望可以和大家一起讨论.总结下来,响应式比之前想象的要复杂得多.1. ie9以下(不包括ie9)采用ie条件注释,为ie8以及一下单独开一个样式 ...

  2. 李洪强iOS经典面试题154- 通知与推送

    李洪强iOS经典面试题154- 通知与推送   通知与推送 本地通知和远程推送通知对基本概念和用法? image 本地通知和远程推送通知都可以向不在前台运行的应用发送消息,这种消息既可能是即将发生的事 ...

  3. phpcms 服务器安全认证错误

    本人将图片的js.images.css路径转移到CDN上了,上传附件的时候就出现了 “服务器安全认证错误”的提示.   找到文件 D:\wamp\www\phpcms\phpcms\modules\a ...

  4. Centos7 Docker 多主机 容器互连--基于OVS

    来一张自己画的图,mark:2016年6月27日17:09:14 自己理解,如有错误 多谢指教. centos7, 部署OVS和docker.以及基于centos6.8的ssh images 命令. ...

  5. 输入框三种输入方式(selenium webdriver 干货)

    在机票预定的页面,输入出发城市和到达城市输入框的时候, 发现直接使用sendkeys不好使, 大部分情况出现输入某城市后没有输入进去, 经过几天的研究,发现可以采取三种方式: 1. 先点击输入框,待弹 ...

  6. UI控件(UIScrollView)

    @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //创建一个scrollview UIScrollV ...

  7. Understand Lambda Expressions in 3 minutes(翻译)

    本文翻译自CodeProject上的一篇简单解释Lambda表达式的文章,适合新手理解.译文后面我补充了一点对Lambda表达式的说明. 1.什么是Lambda表达式? Lambda表达式是一种匿名方 ...

  8. Python调用C++的DLL

    import os import sys from ctypes import * test = cdll.LoadLibrary('D:\Python27\py.dll') print test.A ...

  9. 完成AngularJS with MVC 5, Web API 2项目

    经过接近两个月的日夜奋战,完成AngularJS with MVC 5, Web API 2的项目,这也是进入公司以后最大的一个项目,从项目需求.用户Prototype/Demo,招人,开发完成,可谓 ...

  10. gulp使用小结(二)

    接上篇文章接Gulp使用小结(一) 内容如下: 首先,偶在gulp-demos上已经提交了个较通用的栗子...俺琢磨半天,原准备分阶段搞些 Gulp 套路,但是写完介个栗子之后,觉得已经能覆盖绝大多数 ...