Bitmap和Drawable的区别

news2024/9/20 0:49:58

日记

其实感觉最近事情挺多的,所有最近很多博客都是中午或者晚上休息的时候写的,甚至是项目编译的时候编写的。说真的,我最近感觉,对于那种大量的时间,我反而不能很好的运用,反而对于碎片时间,我能够恰到好处的运用到位。

还是聊聊我的日常吧,我还是很喜欢追番的,我常常和别人说我追番的时候,别人总会摇摇头,然后说,追番实在太累。特别是遇到剧本写的非常好的动漫,它总是能在恰到好处的地方给你留下悬念,从而引诱你非常期待下一集,没错,说的就是你《我推的孩子》。

我重复强调了非常多次,我只是一个兴趣使然的博主,但是总是有吃了空的人说我废话太多,一笑了之~我所有博客都是对各种学习视频和书籍的小结。

正文

这次来聊聊Bitmap和Drawable到底有什么区别。首先我认为我们应该知道这两个到底分别是什么?其实计算机领域的很多东西都是可以直接顾名思义的,所以很多时候命名其实也是一种学问,多看看大佬的命名习惯,都能学到很多。不是有句话叫做:蠢材擅长把简单的东西变得复杂,天才擅长把复杂的东西变得简单,大道至简就是这个道理。命名的时候不过脑子,往往就会有非常多的后遗症,就比如说拼写错误,后面人如果要重新改方法名的话代码评审的时候就需要花费额外的功夫去评审更多的文件,还有方法反射的风险。

Bitmap翻译过来就是位图,就是一个一个像素所组成的图片信息。而Drawable翻译过来就是“可绘制的”,即Drawable定义的是视图的绘制过程(和View有点像)。

所以其实Drawable和Bitmap并没有实际上的必要联系,只是我们平时使用Drawable的时候,用它来进行图片绘制的场景比较多,所以这就导致了这两者就像“真假美猴王”一样,渐渐地难以被区分罢了。

我们完全可以来看看Android源码中对这两个类的定义:

Bitmap:

public final class Bitmap implements Parcelable

我们可以看到对于Bitmap类,官方是不支持继承的,也就是不支持自定义Bitmap的,因为Bitmap更多的像是Kotlin的Data类,里面仅仅存储了图片的相关信息。

Drawable:

public abstract class Drawable

至于Drawable,我们可以看到官方将其设置为抽象类,而且,官方就已经提供了非常多的实现。在这里插入图片描述

最最常见的可能就是BitmapDrawable,我们所谓的Bitmap和Drawable互转其实就是Bitmap和BitmapDrawable之间的互转。Drawable读取Bitmap的相关信息,然后根据配置的参数,将其绘制到我们的目标视图上。

我们来看看如何自定义一个drawable:

new Drawable(){
            private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            @Override
            public void draw(@NonNull Canvas canvas) {
                //Todo:draw something...基于实际需求,根据Paint和设置的属性来进行绘制
            }

            @Override
            public void setAlpha(int i) {
                paint.setAlpha(i);//设置绘制视图的透明度
            }

            @Override
            public void setColorFilter(@Nullable ColorFilter colorFilter) {
                paint.setColorFilter(colorFilter);
            }

            @Override
            public int getOpacity() {
                //简单的Demo,复杂视图该参数并不能简单如此设置
                if(getAlpha() == 0) return PixelFormat.TRANSPARENT;
                if(getAlpha() == 1) return PixelFormat.OPAQUE;
                else return  PixelFormat.TRANSLUCENT;
            }
        };

说了这么多,那么自定义Drawable到底有什么用呢?其实还是那个老生常谈的问题,复用和性能。

我们前面已经说到了,Drawable的作用是封装绘制的过程。我们就可以将视图中的重复的绘制逻辑封装到Drawable中,然后我们就能减少重复代码和视图绘制的层级。

awable的作用是封装绘制的过程。我们就可以将视图中的重复的绘制逻辑封装到Drawable中,然后我们就能减少重复代码和视图绘制的层级。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构之堆的详解

数据结构之堆 一.堆的概念1.1 堆的基本概念1.2 堆的存储方式 二.堆的操作和实现基本框架建堆插入删除 三.堆的应用优先队列top-k问题:最小的K个数或者最大k个数堆排序 一.堆的概念 1.1 堆的基本概念 堆是一种特殊的完全二叉树 堆分为小根堆和大根堆,大根堆的根节…

Notes/Domino 14 Drop1

大家好,才是真的好。 2023年5月31号,Notes/Domino 14 Drop1如约而至。在晚上照理检查了一下Notes相关博客时,就发现该版本现在可以下载。一诺千金,信若尾生,这是我对14版本的第一个评价。 很多人关心Notes/Domino 14…

【redis-初级】redis安装

文章目录 1.非关系型数据库(NoSQL)2.在Linux上安装redis2.1 安装前准备2.2 安装2.3 启动2.4 关闭 3. redis客户端3.1 命令客户端3.2redis远程客户端3.3 redis编程客户端 1.非关系型数据库(NoSQL) 2.在Linux上安装redis 2.1 安装前…

提升网络安全的关键利器:EventLog Analyzer

导语: 随着网络攻击和数据泄露事件的不断增加,企业对于网络安全的关注度也日益提高。在这样的背景下,安全信息与事件管理系统(SIEM)成为了提升网络安全的关键利器之一。本文将重点介绍一款强大的SIEM工具——EventLog…

Spark大数据处理学习笔记1.4 掌握Scala运算符

文章目录 一、学习目标二、运算符等价于方法(一)运算符即方法(二)方法即运算符1、单参方法2、多参方法3、无参方法 三、Scala运算符(一)运算符分类表(二)Scala与Java运算符比较 四、…

mac docker 安装 ES

一. docker 安装 ES 1. 下载镜像 docker pull elastcisearch:8.7.1 2. 启动镜像 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms256m -Xmx256m" elasticsearch:8.7.1 参数说明…

AntDB 存储技术——Hash分片技术

单台机器很难处理海量的数据或者很高的并发查询,需要把数据拆分到多个节点上,在多个节点上进行存储和处理,这种技术叫作数据分区,也称为数据分片。数据分片的主要目的是提高可扩展性,使数据分散到多个节点上&#xff0…

【Java】冒泡排序

文章目录 一、什么是冒泡排序定义冒泡思想代码实现 二、冒泡排序的优化第一次优化第二次优化 三、鸡尾酒排序 一、什么是冒泡排序 定义 冒泡排序(bubble sort)是最基础的排序算法,它是一种基础的交换排序。它的原理就像汽水一样,汽水中常常有许多小气泡…

Vue第八篇Vue3

一 Vue3的变化 1.性能的提升 打包大小减少41% 初次渲染快55%, 更新渲染快133% 内存减少54% 2.源码的升级 使用Proxy代替defineProperty实现响应式 重写虚拟DOM的实现和Tree-Shaking 3.拥抱TypeScript Vue3可以更好的支持TypeScript 4.新的特性 Composition API&#…

Leetcode---349周赛

题目列表 2733. 既不是最小值也不是最大值 2734. 执行子串操作后的字典序最小字符串 2735. 收集巧克力 2736. 最大和查询(这题难度较大,等以后有时间再和大家分享) 一、2733、既不是最小值也不是最大值 关键是看到题目中说数组中的元素不…

一文快速了解软件技术基础

前言 数据结构和算法是计算机科学的基石,它们为我们提供了处理和组织数据的方法和工具。通过学习数据结构,您将能够理解如何存储和操作不同类型的数据,如何优化内存使用和访问效率,以及如何设计高效的算法来解决各种计算问题。掌…

iOS -- isa指针

isa指针:isa指针是一个指向对象所属类或元类的指针。它决定了对象可以调用的方法和属性。isa指针在对象的结构中存在,并且在运行时会被自动设置。isa 指针,表示这个对象是一个什么类。而 Class 类型, 也就是 struct objc_class * …

XML 的命名空间及其在OPCUA中的应用

为了防止不同XML 使用的名称冲突,XML 规范中规定的命名空间,平时编写单一命名空间的XML 文档,没有过多地注意XML 命名空间的细节。当开发OPCUA 信息模型时,被命名空间搞得云里雾里。为此,做了一个笔记。 URI(Uniform R…

Vue3_ElementPlus_简单增删改查(2023)

Vue3,Element Plus简单增删改查 代码:https://github.com/xiaoming12318/Vue3_ElementPlus_CRUD.git 环境: Visual Studio Code Node.js 16.0或更高版本,https://nodejs.org/en axios 快速上手: 如果已经有16.0及…

Vue单文件组件

单文件组件 单文件组件是在开发中用的比较多的,它的后缀都是.vue结尾的 既然是.vue结尾,那么直接给浏览器是不能运行的,.vue文件是vue团队打造的特殊文件,想让.vue文件让浏览器识别并且运行,需要对它进行处理加工成纯…

5款大厂设计师都在用的网页设计工具

本文收集了5款大厂设计师使用的几种流行易用的网页设计工具,其中一个可以AI自动生成设计稿,非常的方便,相信一定有一个适合你的网页设计工具。 1.即时设计 即时设计是一款免费的在线 UI 设计工具,无系统限制,浏览器打…

三个原则判定电源环路稳定性

1 环路稳定性评价指标 衡量开关电源稳定性的指标是相位裕度和增益裕度。同时穿越频率,也应作为一个参考指标。 (1) 相位裕度是指:增益降到0dB时所对应的相位。 (2) 增益裕度是指:相位为0deg时所对应的增益大小(实际是衰减)。 (3) 穿越频率…

DVWA下载、安装及使用教程,网络安全小白必看!

DVWA是一款基于PHP和mysql开发的web靶场练习平台,集成了常见的Web漏洞。旨在为安全人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程; 一、DVMA介绍 DVWA官网 (opens new window)DVWA Github (ope…

springboot配置文件中的巨坑!!

问题 application.yml test:password1: 030030password2: 030030使用此配置的bean Component public class Test {Value("${test.password1}")private String password1;Value("${test.password2}")private String password2;PostConstructpublic void …

企业微信建设代开发应用的基本流程及实现

一、企业微信代开发应用的基本流程 企业微信中除了系统提供的应用以及上架应用商店的第三方应用外,也可以使用自己开发的应用,不过多数企业都不具备开发能力,只能采用代开发的形式进行定制。就给大家分享一下企业微信代开发应用的基本流程&a…