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

  6.1 Drawable简介

      Drawable常被用来作为View的背景使用.

      Drawable一般都是通过XML来定义的.

      Drawable是一个抽象类,它是所有Drawable对象的基类,每个具体的Drawable都是它的子类.

      Drawable的内部宽/高这个参数比较重要,通过getIntrinsicWidth和getIntrinsicHeight这两个方法可以获取到它们.

  6.2 Drawable的分类

      6.2.1 BitmapDrawable

        表示的就是一张照片<bitmap/>

      6.2.2 ShapeDrawable

        可以理解为通过颜色来构造的图形,它既可以是纯色的图形,也可以是具有渐变效果的图形.

        <shape>标签,子属性android:shape="四个选项,rectangle,oval,line,ring"

        子标签

          <coners>,只适用于矩形shape,这里的角度指圆角的程度,用px表示.

          <gradient>,与<solid>标签互斥,其中solid表示纯色填充,二gradient则表示渐变效果

          <solid>,纯色填充,通过android:color即可指定shape中填充的颜色

          <stroke>,Shape的描边

          <padding>,表示空白,但是它表示的不是shape的空白,而是包含它的View的空白

          <size>,shape 的大小

      6.2.3 LayerDrawable

          对应的XML标签是<layer-list>,它表示一种层次化的Drawable集合,通过将不同的Drawable纺织在不同的层上面从而达到一种叠加后的效果.

          一个layer-list中可以包含多个item,每个item表示一个Drawable

      6.2.4 StateListDrawable

          对应的XML标签是<selector>,也是表示Drawable集合,每个Drawable都对应着View的一种状态.

          常见状态:android:state_pressed/state_focused/state_selected/state_checked/state_enabled.

      6.2.5 LevelListDrawable

          对应的XML标签是<level-list>,每个Drawable都有一个等级(levle)的概念.

          根据不同的等级,LevelListDrawable会切换为对应的Drawable

      6.2.6 TransitionDrawable

          对应的XML标签是<transition>,它用于实现两个Drawable之间的淡入淡出效果

      6.2.7 InsetDrawable

          对应的XML标签是<inset>,它可以将其他Drawable内嵌到自己当中,并可以在四周留出一定的间隔.

      6.2.8 ScaleDrawable

           对应的XML标签是<scale>,它可以根据自己的等级(level)将指定的Drawable缩放到一定的比例

      6.2.9 ClipDrawable

          对应的XML标签是<clip>,他可以根据自己当前的等级(level)来裁减另一个Drawable.

    6.3 自定义Drawable

      Drawable的工作原理简单,其核心就是draw方法.

      系统会调用Drawable的draw方法来绘制view的背景,可以通过重写Drawable的draw方法来自定义Drawable

      draw,setAlpha,setColorFilter和getOpacity是必须重载实现的方法.

      

第六章:Android的Drawable的更多相关文章

  1. Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧

    第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...

  2. 《Android开发艺术探索》读书笔记 (6) 第6章 Android的Drawable

    本节和<Android群英传>中的第六章Android绘图机制与处理技巧有关系,建议先阅读该章的总结 第6章 Android的Drawable 6.1 Drawable简介 (1)Andr ...

  3. 我的Android六章:Android中SQLite数据库操作

    今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...

  4. Android群英传笔记——第六章:Android绘图机制与处理技巧

    Android群英传笔记--第六章:Android绘图机制与处理技巧 一直在情调,时间都是可以自己调节的,不然世界上哪有这么多牛X的人 今天就开始读第六章了,算日子也刚好一个月了,一个月就读一半,这效 ...

  5. 第六章:Reminders实验:第二部分[Learn Android Studio 汉化教程]

    Learn Android Studio 汉化教程 Reminders Lab: Part 2 This chapter covers capturing user input through the ...

  6. Pro Android 4 第六章 构建用户界面以及使用控件(一)

         目前为止,我们已经介绍了android的基础内容,但是还没开始接触用户界面(UI).本章我们将开始探讨用户界面和控件.我们先讨论一下android中UI设计的一般原理,然后我们在介绍一下an ...

  7. 第三部分:Android 应用程序接口指南---第二节:UI---第六章 对话框

    第6章 对话框 一个对话框是一个小窗口,提示用户做出决定或输入额外的信息,一个对话框不填充屏幕并且通常用于在程序运行时中断,然后弹出通知提示用户,从而直接影响到正在运行的程序.图6-1就是对话框的外观 ...

  8. Android的学习第六章(布局一LinearLayout)

    今天我们来说一下Android五大布局-LinearLayout布局(线性布局) 含义:线性布局,顾名思义,指的是整个Android布局中的控件摆放方式是以线性的方式摆放的, 主要作用:主要对整个界面 ...

  9. 第六章第一个linux个程序:统计单词个数

    第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数.  第 1 步:建立 Linu x 驱 ...

随机推荐

  1. cb11a_c++_顺序容器的操作4_容器大小操作_resize-max_size

    cb11a_c++_顺序容器的操作4 2 容器大小的操作 3 c.size() 容器当前的个数 4 c.max_size(),容器最大存储量 5 c.empty() 是否为空 6 c.resize(n ...

  2. 1、python简介-变量-注释-数据类型-用户交互-if语句-while循坏

    一. 计算机是什么 基本组成: 主板+cpu+内存 cpu: 主频, 核数(16) 内存:大小(8G, 16G, 32G) 型号: DDR3, DDR4, DDR5, 主频(海盗船,玩家国度) 显卡: ...

  3. 测试人员遇到Android APP崩溃和无响应手足无措?

    这2天,在测APP兼容性时,遇到APP奔溃闪退的情况.将问题反馈给开发后,开发自己调试后,没有复现.由于又是远程,base地不在一块,我总不能把手机寄过去吧,那也太费事了. 所以就想到,提供明确的报错 ...

  4. TensorFlow中读取图像数据的三种方式

    本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...

  5. Excel帮助类

    Excel帮助类操作 public class ExcelHelper { /// <summary> /// 将xls导入List /// </summary> /// &l ...

  6. JDK8--06:Stream流

    一.描述 Stream流提供了筛选与切片.映射.排序.匹配与查找.归约.收集等功能 筛选与切片: filter:接收lambda,从流中排除某些元素 limit(n):截断流,使其元素不超过n ski ...

  7. Docker基本命令及工作原理

    第一个Docker容器     1.首先确保Docker运行正常:docker info

  8. JavaScript基础JavaScript的常用编码惯例(007)

    采用一定的编码惯例,可以使得项目中的代码提到较高的一致性,可读性和可预测性. 1.缩进缩 进可以提高代码的可读性.不过错误的缩进也可能导致代码的误读.有人认为缩进应该使用tab,另外的一些人主张采用4 ...

  9. pycharm远程连接vagrant虚拟机中mariadb数据库

    1.虚拟机数据库设置--重启数据库 (1)vi /etc/my.cnf bind = 0.0.0.0 (2).远程不能用root用户连,得新建用户 select host,user from mysq ...

  10. Illustrate Java Access Levels

    https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html 官网教程,清晰明了. (完)