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. 一篇文章教会你使用Python定时抓取微博评论

    [Part1--理论篇] 试想一个问题,如果我们要抓取某个微博大V微博的评论数据,应该怎么实现呢?最简单的做法就是找到微博评论数据接口,然后通过改变参数来获取最新数据并保存.首先从微博api寻找抓取评 ...

  2. .Net微服务实战之DevOps篇

    技术只是基础 该系列的两篇文章<.Net微服务实战之技术选型篇>和<.Net微服务实战之技术架构分层篇>都是以技术角度出发描述微服务架构的实施. 如果技术选型篇叙述的是工具,那 ...

  3. weblogic高级进阶之ssl配置证书

    1.首先需要明白ssl的原理 这里我们使用keytool的方式为AdminServer配置ssl证书 配置证书的方式如下所示: C:\Users\Administrator\Desktop\mykey ...

  4. 信息收集-DNS

    首先更正一个小白很普遍的错误观点,www.baidu.com(严格上是www.baidu.com. 这个点是根的意思,所有的记录从这里开始)并不是一个真正意义上的域名,而是百度服务器的A记录,baid ...

  5. 入门大数据---Spark_Structured API的基本使用

    一.创建DataFrame和Dataset 1.1 创建DataFrame Spark 中所有功能的入口点是 SparkSession,可以使用 SparkSession.builder() 创建.创 ...

  6. Spring WebFlux 01 (原理及使用场景)

    一.什么是 Spring WebFlux 好多人以为Spring WebFlux就是Spring MVC的升级版,其实不然,那到底什么是Spring WebFlux呢,首先就要搞清楚Spring We ...

  7. java.math.BigDecimal转换double double转换java.math.BigDecimal

    有方法 java.math.BigDecimal.doubleValue() BigDecimal a = new BigDecimal(1000);return a.doubleValue(); p ...

  8. C# Thread、lock

    class Program { private static readonly object obj = new object(); static void Main(string[] args) { ...

  9. tkinter的控件

    包含如下控件: Button  按钮控件 Canvas 画布控件,显示图形元素如线程或文本 Checkbutton 多选框控件,用于在程序中提供多项选择框 Entry 单行输入控件,用于显示简单的文本 ...

  10. nginx location 知识知多少

    写在之前 众所周知 nginx location 路由转发规则多种多样,尤其是 [ = | ~ | ~* | ^~ ] 这些前缀是什么意思.root 与 alias 是否可以区分开,nginx 作为反 ...