我们今天接着来看一下Shape中的stroke属性,stroke其实就是边缘的意思,当我们在定义画笔的时候,有很多时候会用到 FILL 和 STROKE,前者能够画出一个实心的形状,而后者就画出一个空心的图形,所以在这里,stroke表示同样的意思,就是描边。

它只有四个属性:

1)Android:width,表示的是线的粗细。

2)android:color,表示的是线的颜色。

3)android:dashGap,表示的是一条虚线,gap表明是虚线中线与线间的的空隙。

4)android:dashWidth,这个属性表示的是虚线中线的长度,只有设置了dashGap来画一条虚线,这个属性值才能起作用。

代码如下:

  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="#CCCCCC"/>
  5. <stroke android:width="1dp" android:color="#FF0000" android:dashWidth="10dp" android:dashGap="2dp"/>
  6. </shape>

下面是效果,

最下面的按钮是把形状态变成了line的格式:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="line">
  4. <solid android:color="#CCCCCC"/>
  5. <stroke android:width="1dp" android:color="#FF0000" android:dashWidth="10dp" android:dashGap="2dp"/>
  6. </shape>

关于stroke的属性其实就这么一点点,没了。

不过我们讲到shape="line“,我们之前做的例子都是rectangle(矩形),oval(椭圆),而line其实就是一条线,可以是虚线,也可以是直线,都是比较简单的。

Android中提供了四种形状,rectangle(矩形),oval(椭圆),line(直线)和 ring(环),前面几种我们其实已经基本说到了,现在就说说最后的ring(环)吧。

先看看xml中的定义,我定义了三个,可以看一下区别:

  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:useLevel="false">
  5. <gradient android:startColor="#FF0000"
  6. android:endColor="#00FF00"
  7. android:type="linear"/>
  8. <stroke android:width="1dp" android:color="#0000FF"/>
  9. </shape>
  10. <!-- Ring1 -->
  11. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  12. android:shape="ring"
  13. android:innerRadiusRatio="3"
  14. android:thicknessRatio="9"
  15. android:useLevel="false">
  16. ...
  17. </shape>
  18. <!-- Ring2 -->
  19. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  20. android:shape="ring"
  21. android:innerRadiusRatio="2"
  22. android:thicknessRatio="2"
  23. android:useLevel="false">
  24. ...
  25. </shape>
  26. <!-- Ring3 -->
  27. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  28. android:shape="ring"
  29. android:innerRadiusRatio="2"
  30. android:innerRadius="30dp"
  31. android:thicknessRatio="2"
  32. android:useLevel="false">
  33. ...
  34. </shape>

如果我们定义的形状是"ring",我们必须把android:useLevel设为false,不然的话,这个环是显示不出来的。

关于Ring还有几个其特有的属性:

1)innerRadius,设置环内圆的半径。

2)innerRadiusRatio,设置的是内圆半径的比例,默认是3,表明是整个环的宽度的1/3,但是如果我们设置了innerRadius,即具体的宽度的话,这个属性是会被覆盖的。

3)thickness,设置环的厚度。

4)thincknessRatio,设置环的厚度的比较,默认是9,表明是整个环的宽度的1/9,但是如果设置了thickness,同样的,这个属性也会被覆盖的。

(我觉得官文文档那里应该是说反了)

下面是上面定义的4个环的效果图:

第一个是默认的,我们只设置了useLevel=false,其它都是默认值,然后第二个就设置其innerradiusratio = 3 和thicknessratio = 9了。

再从左下角的环,可以看出,设置内径和环的厚度的时候,会先设置内径的区域,而环的厚度如果超过了控件的范围,也就不显示了。

关于shape的基础用法基本就是这样,在更多的时候,我们是结合了layer和shape来实现自定义的效果,比如自定义的进度条,在以后的篇章中,再来慢慢说吧。

最新文章

  1. Web获取客户端物理MAC地址(ocx插件)
  2. CSS3--box-shadow
  3. SQL SERVER With语法[转]
  4. poj3461 字符串匹配 熟悉kmp算法第一题
  5. 让VS默认以管理员身份运行
  6. IOS开发小项目—找色块游戏
  7. 使用javah生成.h文件, 出现无法访问android.app,Activity的错误的解决
  8. 做量化模型Matlab、R、Python、F#和C++到底选择哪一个?
  9. uva 10763 Foreign Exchange(排序比较)
  10. jquery学习笔记3——jq HTML
  11. Android 设计模式实战之关于封装计费代码库的策略模式详谈
  12. Opengl4.5 中文手册—A
  13. 【转】Vim使用笔记
  14. [蓝桥杯]2013蓝桥省赛B组题目及详解
  15. js 检查登录态方法封装(闭包、状态缓存)
  16. 阿里云 RDS for MySQL支持什么引擎
  17. 本地新建git仓库后与远端仓库关联
  18. SSIS: 如何通过SSIS的Foreach Loop Container导入Excel的多个Sheet
  19. Java产生死锁的一个简单例子
  20. reveal 使用注意事项

热门文章

  1. elasticearch 归并策略
  2. C# 多线程系列(三)
  3. Vue初级-样式
  4. 2A课程笔记分享_StudyJams_2017
  5. MAVEN - 生命周期(1)
  6. dotnetnuk错误提醒机制
  7. myeclipse中代码不显示SVN版本号
  8. python tips:dict的key顺序
  9. BZOJ 3531: [Sdoi2014]旅行 权值线段树 + 树链剖分
  10. malloc实现机制、缓冲机制、文件操作、mmap虚拟地址(day06)