博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最全Drawable基础总结
阅读量:6832 次
发布时间:2019-06-26

本文共 4629 字,大约阅读时间需要 15 分钟。

小编阅读后达到的成效与待加强地方:

  • 对Drawable有了更加全面的认知,每种Drewable都能熟练的使用
  • 待加强对自定义Drawable的了解

Drawable在Android开发中最常见的,可能大家最熟悉的就是ShapeDrawable,StateListDrawable一个状态,一形状的,其实还有几种

可以两者结合阅读
先看下相应的demo图

BitmapDrawable

表示一张图片 语法:

复制代码
属性 介绍
android:src 图片的id
android:antialias 是否图片抗锯齿功能
android:dither 是否开启抖动效果
android:filter 是否过滤效果
top 将内部的Drawable放在容器的顶部,不改变其大小,如果为竖直裁剪,则从底部开始裁剪
bottom 将内部的Drawable放在你容器的底部,不改变其大小。如为竖直裁剪,则从顶部开始裁剪
left 将内部的Drawable放在容器的左边,不改变其大小。如为水平裁剪,则从右边开始后裁剪
right 将内部的Drawable放在容器的右边,不改变其大小。如为竖直裁剪,则从左边开始裁剪
center_vertical 将内部的Drawable放在容器的竖直中心,不改变其大小,如为竖直裁剪,那么上下同时开始裁剪
fill_vertical 将内部的Drawable在竖直方向向上填充容器, 如果为竖直裁剪,那么仅当ClipDraewable的等级为0(0表示ClipDrawable被完全裁剪)时才有裁剪行为
center_horizontal 使内部的Drawable在容器中水平居中,不改变它的大小,如果为水平裁剪,那么从左右两边同时开始裁剪
fill_horizontal 使内部的Drawable在水平方向上填充容器,如果为水平裁剪,那么仅当ClipDrawable的等级为0时,才会有裁剪行为
center 使内部的Drawable在容器中水平和竖直方向都居中,不改变其大小,如果为竖直裁剪,那么从上下同时开始裁剪;如果为水平裁剪,那么从左右同时裁剪
fill 是内部的Drawable在水平和竖直方向上同时填充容器。仅当ClipDrawable的等级为0时,才能有裁剪行为
android:mipMap 图像相关的处理技术,纹理映射
android:tileMode 平铺模式

ShapeDrawable

ShapeDrawable是一种通过颜色构造的图形,既可以是纯色的图形,也可以是渐变效果图形。 语法:

复制代码

相应属性解释:

属性 介绍
android:shape 图形的形状:rectangle(矩形),oval(椭圆),line(横线),ring(圆形),默认值矩形;

特有属性:

属性 介绍
android:innerRadius 圆环的内半径
android:thickness 圆环厚度
android:innerRadiusRatio 内半径占整个Drawable宽度的比例,默认为9
android:thicknessRatio 厚度占整个Drawable宽度的比例,默认为3
android:useLevel 一般都是false,当在LevelListDrawable(文章后期会介绍)中使用

特有属性(用px)

属性 介绍
android:radius 四个角设置相同的角度
android:topLeftRadius 设置最上角的角度
android:topRightRadius 设置右上角的角度
android:bottomLeftRadius 设置最下角的角度
android:bottomRightRadius 设置右下角的角度

属性(渐变效果):与(纯色填充)标签相互排斥

属性 介绍
android:angle 渐变角度,默认为0,其值必须为45的度数,0表示从左到右,90表示从下到上
android:centerX 渐变的中心点的横坐标
android:centerY 渐变的中心点的纵坐标,渐变的中心点,渐变的中心点会影响渐变的具体效果
android:startColor 渐变的起始色
android:centerColor 渐变的中间色
android:endColor 渐变的结束色
android:gradientRadius 渐变半径,仅当android:type="radial"时有效
android:useLevel 一般为fasle,当Drawable作为StateListDrawable(后面会有详细介绍)使用时为true
android:type 渐变的类别,有liner(有线性渐变),radial(径向渐变),sweep(扫描渐变),默认值为线性渐变

纯色填充

属性 介绍
android:color 填充的颜色

Shape的描边

属性 介绍
android:width 描边的宽度
android:color 描边的颜色
android:dashWidth 组成虚线的线段宽度
android:dashGap 组成虚线的线段之间的间隔,间隔越大则虚线之间的空隙越大

属性 :android:left .android:top ,android:right ,android:bottom 属性:android:width ,android:height

LayerDrawable

LayerDrawable对应的XML标签,表示一种层次化的Drawable集合,将不同的Drawable放置在不同的层上从而达到一种叠加后的效果。 语法:

复制代码

其中android:top,android:bottom,android:left,android:right表示四周的偏移量

StateListDrawable

StateListDrawable对应 标签,表示Drawable集合,每个Drawable都对应着View的一种状态,根据View的状态选择相应的Drawable; 语法:

复制代码

相应的属性详解:

属性 介绍
android:constantSize StateListDrawable的固定大小是否随着其状态的改变而改变,默认为false
android:dither 是否开启抖动效果,默认值为true
android:variablePadding StateListDrawable 的padding表示是否随着其状态的改变而改变,默认值false
android:state_pressed 表示按下状态
android:state_focused 表示View已经获得焦点
android:state_selected 表示用户选择了View
android: state_checked 表示用户选中了View
android:state_enabled 表示View当前处于可用状态

LevelListDrawable

LevelListDrawable对应于标签,表示一个Drawable集合,集合中每个Drawable都有等级,根据不同的等级,LevelListDrawable会切换为对应的Drawable 语法:

复制代码

maxLevel,minLevel设置等级最大最小值,会根据代码设置的相应的level切换相应的drawable

###TransitionDrawable TransitionDrawable对应于标签,实现Drawable之间的淡入淡出效果 语法:

复制代码

其中android:top,android:bottom,android:left,android:right表示四周的偏移量

InsetDrawable

InsetDrawable对应标签,可以将其他Drawable内嵌到自己当中,并且四周留出一定的边界。 语法:

复制代码

其中android:top,android:bottom,android:left,android:right表示四周的偏移量

ScaleDrawable

ScaleDrawable对应的标签为,可以根据自己的等级(level)将指定的Drawable缩放到一定比例。 语法:

复制代码

android:scaleGravity等同于androiid:gravity,android:scaleHeight和android:scaleWidth分别表示对指定Drawable宽高的缩放比例,用百分比表示。

ClipDrawable

ClipDrawable对应于标签,根据自己的等级(level)来裁剪另一个Drawable,裁剪的方向根据属性android:clipOrientation和android:gravity两个属性共同决定的。其中clipOrientation表示裁剪方向,分为水平(horizontal)和竖直(vertical)方向

语法:

复制代码
选项 意义
top 将内部的Drawable放在容器的顶部,不改变其大小,如果为竖直裁剪,则从底部开始裁剪
bottom 将内部的Drawable放在你容器的底部,不改变其大小。如为竖直裁剪,则从顶部开始裁剪
left 将内部的Drawable放在容器的左边,不改变其大小。如为水平裁剪,则从右边开始后裁剪
right 将内部的Drawable放在容器的右边,不改变其大小。如为竖直裁剪,则从左边开始裁剪
center_vertical 将内部的Drawable放在容器的竖直中心,不改变其大小,如为竖直裁剪,那么上下同时开始裁剪
fill_vertical 将内部的Drawable在竖直方向向上填充容器, 如果为竖直裁剪,那么仅当ClipDraewable的等级为0(0表示ClipDrawable被完全裁剪)时才有裁剪行为
center_horizontal 使内部的Drawable在容器中水平居中,不改变它的大小,如果为水平裁剪,那么从左右两边同时开始裁剪
fill_horizontal 使内部的Drawable在水平方向上填充容器,如果为水平裁剪,那么仅当ClipDrawable的等级为0时,才会有裁剪行为
center 使内部的Drawable在容器中水平和竖直方向都居中,不改变其大小,如果为竖直裁剪,那么从上下同时开始裁剪;如果为水平裁剪,那么从左右同时裁剪
fill 是内部的Drawable在水平和竖直方向上同时填充容器。仅当ClipDrawable的等级为0时,才能有裁剪行为

初写文章,大家请轻点喷

最后感谢刚哥的Android开发艺术探索

转载于:https://juejin.im/post/5ae5d5d45188256727743047

你可能感兴趣的文章
While 나가는 법
查看>>
c语言操作符的优先级
查看>>
Codeforces Round #420 (Div. 2) A-E
查看>>
9.4-9.19 h5日记总结
查看>>
SimpleAdapter
查看>>
一 python并发编程之多进程
查看>>
less文件编译成微信小程序wxss文件
查看>>
viewport 学习
查看>>
jackson详解
查看>>
Python-JS事件与面向对象操作
查看>>
Linux启动过程总结
查看>>
新建android工程的时候eclipse没有生成MainActivity和layout布局
查看>>
Halcon算子翻译——dev_get_system
查看>>
div模拟textarea文本域轻松实现高度自适应
查看>>
解决-2008 R2 SP1安装Thinkpad System Update 4无法更新 提示"收集用户信息时出错"
查看>>
详细对比IB开发与纯手码开发的优劣。
查看>>
Codeforces Round #331 (Div. 2)
查看>>
梦断代码阅读笔记二。
查看>>
MS .NET企业级应用架构设计笔记1(关于业务层)
查看>>
页面加载顺序的问题
查看>>