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

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 BLE蓝牙详细解读

    代码地址如下: http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能 ...

  2. android蓝牙设置特征属性,Android BLE蓝牙详细解读(二)

    上篇文章主要介绍了关于BLE的一些基础操作,我们能够大概了解到蓝牙操作的一些流程,上文末介绍了本人的一个BLE开源库,支持蓝牙一对多的连接方式,该库封装了蓝牙的开启.扫描.连接.断开.连接超时...一 ...

  3. Android开发 shape使用

    转自:http://m.blog.csdn.net/article/details?id=51824524 点击打开 介绍 简单来说,shape就是用来在xml文件中定义形状,代码解析之后就可以当做D ...

  4. andriod1-部署android开发环境详细教程

    普及专有名词: avd:安卓虚拟设备(模拟硬件): sdk:开发工具包/插件/开发环境(开发必用): adt:下载各种版本sdk的工具(负责开发工具包的管理). 一.准备的工具: eclipse(英文 ...

  5. android增量更新详细解读

    1 增量更新的意义 a 神马是增量更新? 这个概念很早就被提出,但是目前的形式,小厂用的很少,大厂用的比较多:企鹅的QQ和微信里面都有增量更新着玩意:到底神马是增量更新? 首先增量更新主要用于新版本a ...

  6. android开发 theme,详细介绍了Android主题与风格开发教案(style and theme)

    Android设备和iOS设备的界面风格比较起来,说实话Android的默认UI组件最多只是可以看,绝对比不上iPhone默认组件那么好看和耐看.不过Android系统的开放性很高,我们可以从头到尾改 ...

  7. 轻松学Android开发

    <轻松学Android开发>一书共分四篇. "Android基础篇" 主要介绍Android系统.Android布局设计以及Android程序开发中常用的各类控件等知识 ...

  8. 【绝对给力】Android开发免豆资料(教程+工具+源码)下载地址汇总 【转载自51CTO】

    下载中心特意为广大搞android开发的同学整理了一批0下载豆的资料,希望大家喜欢~ 资料目录下载:http://down.51cto.com/data/439071 目录内容无格式浏览: 教程下载: ...

  9. Android开发免豆资料(教程+工具+源码)下载地址汇总

    下载中心特意为广大搞android开发的同学整理了一批0下载豆的资料,希望大家喜欢~ 资料目录下载: http://down.51cto.com/data/439071 目录内容无格式浏览: 教程下载 ...

最新文章

  1. 【Python】重载模块
  2. SpringBoot一个依赖搞定Session共享,没有比这更简单的方案了!
  3. LazyListBoxHelper 动态分页
  4. wxWidgets:wxChoicebook类用法
  5. Difference between RawValue and FormattedValue
  6. JSP动作元素/活动元素
  7. spring版本 jdk8_从JDK8升级到JDK11,看这篇就足够了
  8. Linux shell中比较操作符“==”与“-eq”对比
  9. Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法
  10. Android应用程序线程消息循环模型分析(5)
  11. python 建站 上传文件_python往网站上传数据
  12. Python实战之Selenium自动化测试web刷新FW
  13. Entity Framework 全面教程详解
  14. 如何防范短信接口被恶意攻击
  15. Structs的执行流程
  16. “十问”彻底弄懂APS、ERP、MES的集成问题
  17. Android事件分发机制浅析
  18. Android To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(),
  19. 托福经验分享:20天从93分考到105分
  20. 巴比特 | 元宇宙每日必读:未成年人打赏后要求退款,虚拟主播称自己是大冤种,怎么看待这个监管漏洞?...

热门文章

  1. 为什么在大多数OS中都引入”打开“这一文件系统调用?打开的含义是什么?...
  2. 人工智能数学基础---定积分5:使用分部积分法计算定积分
  3. Cobot专长:了解您的日常需求
  4. AI一分钟 | 苹果9月13日凌晨召开发布会;林斌晒小米手机新品,“撞脸”荣耀Magic 2...
  5. 学前端的你了解这些知识吗?——BFC、IFC、GFC、FFC
  6. 格力2代,原厂固件hola1.2.2
  7. 教你用Python拨打电话
  8. 配置虚拟机(VMware Workstation)静态 IP 地址
  9. Microsoft Visio Professional 2013打不开也卸载不了解决办法
  10. Chrome (Google) 浏览器的快捷键大全