<Android 基础(十三)> shape
2016-07-04 23:04
393 查看
介绍
简单来说,shape就是用来在xml文件中定义形状,代码解析之后就可以当做Drawable一样使用
官方说明
关于shape定义的drawable文件位置:res/drawable/filename.xml
编译资源类型:GradientDrawable
文件引用:
In Java: R.drawable.filename
In XML: @[package:]drawable/filename
语法:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape=["rectangle" | "oval" | "line" | "ring"] > <corners android:radius="integer" 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 android:width="integer" android:height="integer" /> <solid android:color="color" /> <stroke android:width="integer" android:color="color" android:dashWidth="integer" android:dashGap="integer" /> </shape>
这里只做简单的描述,主要看看使用方式。关于元素的详细说明,请看 shape说明
实际使用
矩形
填充(solid)<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!--填充颜色 --> <solid android:color="@color/colorAccent" /> </shape>
描边(stroke)
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!--填充颜色 --> <solid android:color="@color/colorAccent" /> <!--描边颜色--> <!--android:dashGap 虚线间距,这里设置为0则显示的为实线--> <!--android:dashWidth 虚线宽度--> <stroke android:width="3dp" android:color="@color/colorPrimaryDark" android:dashGap="0dp" android:dashWidth="10dp" /> </shape>
圆角(corner)
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!--填充颜色 --> <solid android:color="@color/colorAccent" /> <!--描边颜色--> <!--android:dashGap 虚线间距,这里设置为0则显示的为实线--> <!--android:dashWidth 虚线宽度--> <stroke android:width="3dp" android:color="@color/colorPrimaryDark" android:dashGap="4dp" android:dashWidth="10dp" /> <!--圆角--> <!--android:randius 设置4个叫的圆角半径,会被特定的圆角设定覆盖--> <!--android:bottomLeftRadius 左下角的圆角半径--> <!--android:bottomRightRadius 右下角的圆角半径--> <!--android:topLeftRandius 左上角的圆角半径--> <!--android:topRightRadius 右上角的圆角半径--> <corners android:bottomLeftRadius="60dp" android:radius="30dp" android:topRightRadius="120dp" /> </shape>
渐变(gradient):linear
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!--描边颜色--> <!--android:dashGap 虚线间距,这里设置为0则显示的为实线--> <!--android:dashWidth 虚线宽度--> <stroke android:width="3dp" android:color="@color/colorPrimaryDark" android:dashGap="4dp" android:dashWidth="10dp" /> <!--圆角--> <!--android:randius 设置4个叫的圆角半径--> <!--android:bottomLeftRadius 左下角的圆角半径--> <!--android:bottomRightRadius 右下角的圆角半径--> <!--android:topLeftRandius 左上角的圆角半径--> <!--android:topRightRadius 右上角的圆角半径--> <corners android:bottomLeftRadius="60dp" android:radius="30dp" android:topRightRadius="120dp" /> <!--渐变--> <gradient android:angle="45" android:centerColor="@color/stone" android:endColor="@color/pink" android:startColor="@color/yellow" /> </shape>
渐变(gradient):radial
<gradient android:angle="90" android:startColor="@color/colorPrimary" android:centerColor="@color/pink" android:endColor="@color/yellow" android:gradientRadius="400dp" android:type="radial"/>
渐变(gradient):sweep
<gradient android:startColor="@color/colorPrimary" android:centerColor="@color/pink" android:endColor="@color/yellow" android:gradientRadius="400dp" android:type="sweep"/>
圆形
正圆<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <gradient android:centerColor="@color/pink" android:endColor="@color/yellow" android:startColor="@color/colorPrimary" /> <size android:width="400dp" android:height="400dp" /> </shape>
椭圆
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <gradient android:angle="90" android:centerColor="@color/pink" android:endColor="@color/yellow" android:startColor="@color/colorPrimary" /> </shape>
线条
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="9dp" android:color="@color/pink" /> </shape>
环形
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadius="100dp" android:thickness="50dp" android:useLevel="false" > <gradient android:startColor="@color/colorAccent" android:endColor="@color/yellow" android:centerColor="@color/pink"/> </shape>
android:useLevel=”false”这个属性值一定要设置成false,根据google官网上的解释:
以下属性只能在
android:shape="ring"的时候使用:
属性 | 意义 |
---|---|
android:innerRadius | 尺寸,内环的半径 |
android:thickness | 尺寸,环的厚度 |
android:innerRadiusRatio | 浮点型,以环的宽度比率来表示内环的半径, 例如,如果android:innerRadiusRatio=5,表示内环半径等于环的宽度除以5,这个值是可以被android:innerRadius的值覆盖,默认为9. |
android:thicknessRatio | 浮点型,以环的宽度比率来表示环的厚度,例如,如果android:thicknessRatio=2, 那么环的厚度就等于环的宽度除以2。这个值是可以被android:thickness覆盖的,默认值是3. |
android:useLevel | boolean值,如果当做是LevelListDrawable使用时值为true,否则为false.这个值一般为false,否则你的环可能不会出现 |
其他说明
这些自己定义的shape为根节点的drawable xml文件,可以用来当成背景使用在Button,TextView等视图上,同时由于可以设置size大小,也可以用来制作简单的图标等。总而言之,每个细小的东西,都有挖掘的
价值,感觉这里面还有一些东西我没有注意到,还要好好的看一下文档。
最后,google镜像网站,xsoftlab,当然有条件的建议使用Google官网。
相关文章推荐
- AndroidStudio中SVN checkout如何做
- Android Studio官方文档之Android Studio创建工程项目篇
- Android Studio导入项目非常慢的解决办法
- 异常:android.database.StaleDataException: Attempted to access a cursor after it has been closed
- android-Paint
- android-Rect
- android-Canvas
- In android studio,cannot load 2 facets-unknown facet type
- Android使用ScrollView+ListView时发生滑动冲突的解决办法
- Android酷炫动画效果之进度加载动画
- android基本控件的使用
- android studio安装
- android studio for android learning (十一) 利用bundle在activity之间进行数据传递示例
- Android开发最佳实践(未完待译)
- 【Android开发—电商系列】(三):缓存的使用
- Android数据库框架ORMLite的学习笔记
- Android Canvas drawArc方法介绍
- 我对MVC和MVP的一些理解
- Android--启动另一个Activity并返回结果
- Android framwork 分析之智能指针LightRefBase ,sp,wp,RefBase