首页 > 其他分享 >不同类型Drawable解析

不同类型Drawable解析

时间:2024-06-30 22:42:30浏览次数:16  
标签:xml 这里 代码 类型 Drawable 解析 方法

不同类型Drawable解析

这里简单分析下不同xml是怎么解析成Drawable的

一般获取一个Drawable资源有很多方法,如下方截图是一种,不同方法最后其实殊途同归,都是一个地方解析转化的,这里只以下面代码为入口分析

前面代码片段比较简单,Resources的gerDrawable方法有多个不同数量参数的重载方法最后调用到三个参数的方法,然后会调用到getDrawableForDensity方法,这里先是调用ResourcesImpl的getValueForDensity接口根据id等信息从资源管理中获取对应资源文件信息,然后调用loadDrawable方法获取Drawable

ResourcesImpl的loadDrawable方法较长,这里只截取主要部分:

上面截图代码中,前面部分是之前加载过的图片会保存一般会保存个缓存信息,再次加载时直接从缓存信息中获取相关信息生成图片,这里不细述,后面部分即是生成图片的地方,cs不为空则是从缓存获取信息,isColorDrawable一般是直接设置颜色的那种,这里是直接创建ColorDrawable,至于isColorDrawable的判断,如下代码所示,对于颜色资源,其TypedValue的type是有固定范围的,这里也是因此判断的

剩下的就是我们比较关心的主要部分了,即loadDrawableForCookie,仍是截取主要部分代码如下:

这里根据资源文件是否xml类型分别处理,

如果不是xml类型,调用decodeImageDrawable方法,这里一般对应png等二进制图片资源,一般解析成BitmapDrawable、NinePatchDrawable或AnimatedImageDrawable

如果是xml类型也分两种,一种是解析成ColorStateListDrawable,如下面这种

其他的主要是调用loadXmlDrawable方法:

继续走读代码:

上面r.getDrawableInflater方法返回的是一个DrawableInflater的对象,查看其inflateFromXmlForDensity方法

这里就到关键代码了,这里生成Drawable有两个地方,一是inflateFromTag,一是inflateFromClass

如上代码所示,基本上常用的xml类型的图片都在这里定义了,根据不同的tag而创建对应的Drawable对象

顺便也看下inflateFromClass方法,这里看着用于解析指定class的Drawable,一般如果应用自定义drawable类型的话可以使用这种,如下方所示

标签:xml,这里,代码,类型,Drawable,解析,方法
From: https://www.cnblogs.com/luoliang13/p/18277085

相关文章

  • 【Redis二】Redis数据类型
    目录一.Redis数据类型分布二.字符串类型string 1.概述2.操作三.列表list1.概述2.操作四.哈希hash1.概述2.操作五.无序集合set1.概述2.应用范围3.操作六.有序集合zset1.概述2.应用范围3.操作七.通用命令一.Redis数据类型分布通常Redis的数据类型有五大......
  • “了解MySQL中的enum枚举数据类型“
    目录#开篇1.创建包含枚举类型的表2.插入枚举类型的数据3.查询包含枚举类型的表4.更新枚举类型的数据5.使用枚举类型的好处注意事项示例总结附加#开篇        在数据库中,枚举(ENUM)是一种数据类型,用于存储一组预定义的值。这在某些情况下非常有用,例如......
  • 移动硬盘插上去有响声但读不出来?八个原因解析,四个硬盘数据恢复方法!
    当移动硬盘插入电脑后发出响声但无法被正常读取时,这往往意味着硬盘可能遇到了某种问题,如物理损坏、连接问题或文件系统错误等。面对这种情况如何恢复硬盘中存储的重要数据呢?其实数据恢复并非总是轻而易举,但并非毫无希望。在尝试恢复数据之前,我们要冷静分析可能的原因,并采取......
  • 数据分析神器Pandas快速入门3类型转换
    序列类型转换3.1自动转换在pandas1.0中,引入了一种新的转换方法.convert_dtypes。它会尝试将Series换为支持pd.NA类型。以city_mpg系列为例,它将把类型从int64转换为Int64:>>>city_mpg.convert_dtypes()01919223310417......
  • 深入解析MySQL语句的执行步骤
    目录MySQL架构概述语句执行步骤总览连接管理与线程处理语法解析查询缓存语义解析与预处理查询优化执行计划生成存储引擎层执行结果集返回优化查询性能的技巧结论MySQL架构概述在深入探讨MySQL语句执行的具体步骤之前,我们先来了解MySQL的整体架构。MySQL架构主要包括以下......
  • Hadoop:全面深入解析
       Hadoop是一个用于大规模数据处理的开源框架,其设计旨在通过集群的方式进行分布式存储和计算。本篇博文将从Hadoop的定义、架构、原理、应用场景以及常见命令等多个方面进行详细探讨,帮助读者全面深入地了解Hadoop。1.Hadoop的定义1.1什么是Hadoop   Hadoop是......
  • 揭秘Python:对象类型打印
    哈喽,大家好,我是木头左!一、Python数据类型简介在Python的世界中,了解你正在处理的数据类型是至关重要的。Python提供了多种内置数据类型,包括数字(整数和浮点数)、字符串、列表、元组、字典等。这些数据类型决定了你可以对数据执行哪些操作,以及如何高效地存储和处理数据。1.数字......
  • SQL Server的隐私盾牌:动态数据屏蔽(DMS)全面解析
    ......
  • 深度解析:scikit-learn Pipeline记忆功能的秘密
    标题:深度解析:scikit-learnPipeline记忆功能的秘密摘要scikit-learn(简称sklearn)是Python中一个广泛使用的机器学习库,它提供了许多用于数据挖掘和数据分析的工具。Pipeline是sklearn中一个强大的功能,允许用户以流水线的方式组合多个数据转换和/或模型训练步骤。本文将详细......
  • Windows 7操作系统全面解析与实用技巧
    Win7操作系统一、操作系统的概述1.1操作系统的概念操作系统(operatingsystem,简称OS)一组控制和管理计算机系统的硬件和软件资源、控制程序执行、改善人机界面、合理地组织计算机工作流程并为用户使用计算机提供良好运行环境的一种系统软件。目的在于提高计算机系统的效率,增强......