Android的Drawable学习(一)

前言:

关于Drawable的学习.主要的学习来源是开发艺术探索这本书,关于Drawable的其他知识本人未在网上看其他的,这本书上已经讲的非常详细了.都是非常基础的知识.没有什么难点.这里主要是从一个初中级程序猿的角度,和大家一起分享学习的知识.那么今天的学习就开始了.让我们来一边学习一边验证吧.

Drawable的简介

Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念,它的种类有很多,最常见的颜色和图片都可以是一个Drawable.

这里的Drawable指是的下面这个

而不是这个

题外话:关于Drawable的微技巧郭神有篇文章写的很好,可以去看看Android drawable微技巧,你所不知道的drawable的那些细节


我们继续.

Drawable的内部宽/高参数

获取Drawable的宽,返回结果为int值

```

       public int getIntrinsicWidth(){}

```

获取Drawable的高,返回结果为int值

```

        public int getIntrinsicHeight(){}

```

但是注意了啊.这个Drawable的宽高还是有很多门道道的.不是所有的Drawable都有宽高的.

一个图片形成的Drawable的宽高就是图片宽高,颜色所形成的的Drawable没有内部宽高的概念.当被用作View的背景时,Drawable会被拉伸至View的同等大小.我们来验证一下.

布局就只是一个宽100dp,高150dp的button,没有任何额外的属性.看一下的pop_bg的代码,也很简单


button


pop_bg
代码部分

输出打印:

输出结果

可以看出:button是有宽高的,但的Drawable获取到的宽高都是-1.也就是没有内部宽高.那我们来完善一下上述的结论:

当作为一个View的背景时,如果drawable是由颜色形成的,那么drawable仍然没有宽高.


那么它什么时候可以获取到宽高呢?我们来试一试.

把pop里的代码修改下.代码如下


修改为图片

输出结果如下


看到结果证明可以获取到宽高了,这个宽高也正是图片的宽高.这里虽然button的宽高为300/450,但是对于drawable的宽高是没有影响的.影响drawable宽高大小的是图片本身的宽高.

那么看到这里我们其实已经明白,Drawable本身并没有大小的概念,完全取决于其形成因素.(有什么卵用,从来没获取过)


常见的Drawable分类

Android内置了很多种Drawable,做了这么长时间的开发,用到的也就两三个.所以我们以用的最多的ShapeDrawable,LayerDrawable,StateListDrawable,以及自定义Drawable.这里只介绍需要介绍的属性,一看就知道是什么意思的就不说了.

一.ShapeDrawable

对应的标签为:<shape> 其实体类实际上是GradientDrawable.各个属性的含义.

(1).<shape>标签本身的属性

```

<shape xmlns:android="http://schemas.android.com/apk/res/android"

                 android:shape="rectangle|oval|line|ring"

/>

```

只有一条选择图形的属性 从左到右分别为矩形|椭圆|线|圆环

默认值为rectangle(矩形).其中ring圆环比较怪异.试验了几次.看了很多博客,几乎没有人用这个属性.这里就不列出来了.有兴趣的可以自行查阅.



(2).<corners>

表示shape四个角的角度.只适用于矩形shape.

这里的角度是指圆角的程度,用px来表示,有如下5个属性.


shaper_corners

每个属性的名字已经告诉我们是什么意思了,这里就不过多赘述.

值得一提的是这里的角度指的是圆角的程度,用px来表示. 所有属性同时存在时,radius的优先级最低,会被其他四个属性覆盖.也就是说其他四个属性谁存在,就会覆盖radius中对应角的数值.



(3).<gradient>

表示渐变效果和下面要介绍的<solid>互相排斥,只能存在一个.

shape-gradient

android:angle

渐变的角度.默认为0,其值必须为45的倍数,0表示从左到右渐变,90表示从下到上. 请看下图(摘自猿行天下的博客)

android:type="linear|radial|sweep"

渐变的类型,从左到右分别为线性渐变,径向渐变,扫描性渐变.默认值为线性渐变.

android:gradientRadius="integer"

渐变半径,仅当android:type="radial"(径向渐变)时有效.

android:useLevel="true|false"

一般为false,也建议为false.想了解的可以去了解,没什么用.



(4).<padding>

padding属性就不介绍了.一看便知



(5).<solid>和<stroke>

<solid>这个标签标示纯色填充,也就是通过它形成的Drawable获取不到宽高.通过android:color即可指定shape中填充的颜色

<stroke>

android:dashGap="integer"   组成虚线之间的间隔,间隔越大,虚线之间的空隙越大.

android:dashWidth="integer" 组成虚线的线段的宽度.

二者任何一个为0,那么虚线效果将不能生效.


(6).<size>

分别表示shape的固有宽高,但是一般来说它并不是shape最终显示的大小.

这里直接放出总结:对于shape来说,默认情况下是没有固定宽高这个概念的,<size>标签指定宽高信息之后,那么这个shape就有了所谓的固定宽高,但是作为View背景时,shape还是会被拉伸或者缩小为View的大小.

那么这个size什么时候有效呢?我的理解是当shape的组成仅仅是由颜色也就是<solid>和<size>组成,同时view的宽高设置为wrap_content时,此时View的宽高即为这个size设置的宽高.(尼玛完全没用啊,浪费感情).我们来验证下.

同样是最顶部的代码,修改一下button和pop

button


pop

输出结果:

输出结果

看,我们控件设置wrap_content,但是获取到的宽高和我们在布局里设置有同样的效果,但是仅仅是局限于颜色形成的drawable.图片因为本身有固定的宽高,所以<size>肯定会被改变的.


本来还想接着写,有点太长了,放到下一个吧.主要是说明LayerDrawable,StateListDrawable,以及自定义Drawable.

这里对于我的写博客的初衷再次说明.最重要的是督促自己的学习,同时分享给大家我的学习历程和学到的知识,我会尽量从我(一个初中级之间徘徊的程序员)的角度去学习,同时分享学习中遇到的问题,分享我在学习一个知识时的想法.因为我相信我勉强可以作为Android程序员中占比最大的群体的一个典型的缩影==>.仅仅是能做项目,如何做的更好,让自己有更高的技术水平,每天面对海量的知识不知道怎么办.对于高阶的知识一知半解,看了又忘.

我身边这样的人数不胜数,也是在大浪淘沙的形式下苦苦挣扎的苦逼码农.可是总要向前的.那么就一点一点的进步好了.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容