Android进阶知识(十七):Android的Drawable

Android进阶知识(十七):Android的Drawable

一、Drawable简介

  Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念,其种类很多,最常见的颜色和图片都可以是一个Drawable。
  在实际开发中,Drawable常被用来作为View的背景使用。Drawable一般通过XML定义,如我们最经常接触的在项目的目录app\src\main\res\drawable下就是XML定义的Drawable。同样可以通过代码来创建具体的Drawable对象,只是稍微复杂。
在这里插入图片描述
  Drawable的内部宽/高这个参数很重要,通过getIntrinsicWidth和getIntrinsicHeight方法可以获取。但并不是所有的Drawable都有内部宽/高,比如一张图片所形成的Drawable其内部宽/高就是图片的宽/高,但是一个颜色所形成的Drawable没有内部宽/高的概念。
在这里插入图片描述
  Drawable的内部宽/高不等同于它的大小,一般来说,Drawable没有大小概念,当用作View背景时,Drawable会被拉伸至View的同等大小

二、Drawable分类

  Drawable的种类繁多,常见的有BitmapDrawable、ShapeDrawable、LayerDrawable以及StateListDrawable等,下面笔者将介绍常见的几种Drawable的简介以及其对应的标签,至于具体的使用,后续也许笔者会单独做一个专门的笔记。
在这里插入图片描述

Drawable作用标签
BitmapDrawable表示一张图片,在实际开发中可以引用原始图片,也可以通过XML的方式来描述它<bitmap>
ShapeDrawable通过颜色来构造图形,其既可以是纯色的图形,也可以是具有渐变效果的图形<shape>
LayerDrawable表示一种层次化的Drawable集合,通过将不同的Drawable放置在不同的层次上面从而达到一种叠加后的效果<layer-list>
StateListDrawable表示Drawable集合,每个Drawable对应着View的一种状态,系统会根据View的状态来选择合适的Drawable<selector>
LevelListDrawable同样表示一个Drawable集合,集合中的每个Drawable都有一个对应的level,其根据不同的level来切换对应的Drawable<level-list>
TransitionDrawable用于实现两个Drawable之间的淡入淡出效果<transition>
InsetDrawable将其他Drawable内嵌到自己当中,并可以在四周留出一定的间距<inset>
ScaleDrawable根据自己的等级(level)将指定的Drawable缩放到一定的比例<scale>
ClipDrawable根据自己当前的等级(level)来裁剪另一个Drawable<clip>

三、自定义Drawable

  Drawable的使用范围很单一,一个是作为ImageView中的图形显示,一个是作为View的背景,大多数情况下Drawable都是以View的背景这种形式出现的。
  Drawable的工作原理很简单,其核心方法为draw方法,结合之前的View的工作原理不难理解。因此自定义Drawable最主要的就是重写draw方法
在这里插入图片描述
  另外需要注意getIntrinsicWidth和getIntrinsicHeight方法,当自定义的Drawable有固有大小时最好重写这两个方法,因为它会影响到View的wrap_content布局,比如自定义Drawable是绘制一张图片。
在这里插入图片描述

参考资料:《Android开发艺术探索》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值