Drawable

Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念。

Drawable的优点:

  1. 使用简单,比自定义View的成本要低
  2. 非图片类型的Drawable占用空间较小,利于减少apk的大小

1.简介

Drawable有很多种,表示一种图像的概念。

Drawable是一个抽象类,它是所有Drawable的基类。

Drawable的内部宽高参数比较重要,获取方法:getIntrinsicWidth() , getIntrinsicHeight()

并不是所有的Drawable都有内部的宽高;对于一张图片所形成的Drawable,它的内部宽高就是图片的宽高。

2.分类

  • BitmapDrawable
    表示一张图片 , 在xml种定义使用标签
    属性: antialias 图片抗锯齿 ; dither 抖动效果(让高质量的照片在低质量的屏幕上显示较好的效果) ; filter 过滤 ; tileMode 平铺模式 [ repeat , mirror , clamp]
  • NinePatchDrawable
    .9格式图片
  • ShapeDrawable
    属性: shape [rectangle , oval , line , ring] ; corners 四个角的角度 ; gradient 渐变 angle角度 0 : 从左到右 , 必须是45的倍数 , 90从上到下 , type : 渐变的效果 [linear , radial , sweep]; solid 填充 ; stroke 描边
  • LayerDrawable
    表示一种层次化的Drawable集合
  • StateListDrawable
    Selector,可根据不同的状态来设置不同的样式
  • LevelListDrawable
    表示一个Drawable集合,集合中的每个Drawable都有一个等级概念,根据不同的等级会切换为对应的Drawable。
    通过minLevel , maxLevel来设置最小最大等级,在此之间会显示该Drawable。可以通过Drawable的setLevel来切换Drawable , 也可以通过ImageView的setImageLevel来切换Drawable。Drawable等级0~10k
  • TransitionDrawable
    实现两个Drawable之间的淡入淡出 ; TransitionDrawable.startTransition() / reverseTransition()
  • InsetDrawable
    将其他Drawable内嵌到自己当中,并在四周留出一定的间距
  • ScaleDrawable
    scaleGravity 对应 gravity ; scaleWidth , scaleHeight指定drawable宽和高的缩放比例,以百分比的形式表示。
    注意scaledrawable受等级的影响,0表示ScaleDrawable不可见。
    不能少了设置等级这一步(setLevel())
  • ClipDrawable
    根据当前的level来裁剪另一个drawable,裁剪的方向通过clipOrentation , gravity来共同控制 ; gravity是表示将被裁剪的图片放在哪 , 裁剪的方向与gravity方向相反;
    对于ClipDrawable, 0表示完全裁剪 , 10k表示不裁剪 , 等级越大表示裁剪的区域越小;

3.自定义Drawable

必须重写draw() , setAlpha() , setColorFilter() , getOpacity()方法。

注意:自定义Drawable无法在xml文件中使用

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值