Drawable以及资源分析

简介: drawable是一个抽象类,他把资源文件夹下的Drawable用其子类进行实例化,然后绘制.so,我们只是在drawble资源中进行了配置,其绘制过程在对应的实现类中.

drawable是一个抽象类,他把资源文件夹下的Drawable用其子类进行实例化,然后绘制.so,我们只是在drawble资源中进行了配置,其绘制过程在对应的实现类中.
本文举例几种不常见的drawable......

1.BitmapDrawble

Bitmap-->位图

Bitmap是存储图片的一个类,构造成的是一个位图.构造过程在native方法中.

Drawable-->绘制

 A Drawable is a general abstraction for "something that can be drawn."  Most
 * often you will deal with Drawable as the type of resource retrieved for
 * drawing things to the screen.
 *drawable是一个抽象类,可以对资源进行绘制的工具类.

说一下Bitmap和Drawable的关系
Drawable的子类BitmapDrawble是对bitmap的包装类,在他的BitmapState中有一个bitmap对象引用.也就是说可以通过转型得到bitmap

BitmapDrawable bd = (BitmapDrawable) drawable;  
Bitmap bm= bd.getBitmap();  

下是他注释的翻译.

A Drawable that wraps a bitmap and can be tiled, stretched, or aligned. You can create a
 BitmapDrawable from a file path, an input stream, through XML inflation, or from a {@link android.graphics.Bitmap} object.
 BitmapDrawble是一个bitmap的包装类,可以对bitmap进行平铺,拉伸和对齐等.可以通过IO,文件,xml或者bitmap构建对象

2.ShapeDrawable

ShapeDrawable是最常见的,他通过xml的drawable构建shape得到.

它对应的类不是ShapeDrawable,而是android.graphics.drawable.GradientDrawable.....害我找了好久shape中的ring等方法,好坑.

我们可以通过这个绘制我们想要的效果
比如,我们绘制一层蒙层效果,效果不错.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <gradient
        android:angle="180"
        android:endColor="@android:color/transparent"
        android:startColor="@android:color/white" />

</shape>

img_c0be513c97b646cf2173971a32bb5526.png
image.png

3.LayerDrawable

LayerDrawable对应的是XML的<layer-list>,他是一种层次化的Drawable,类似于层叠效果.

这种我们可以做这种需求,比如需要对一个自定义控件进行底部画线,或者用线半包含底边,我们可以用.9图,或者用layer_list实现,作为background.比如

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item >
    <shape android:shape="rectangle">
        <solid android:color="#0ac39e"></solid>
    </shape>
</item>

    <item android:bottom="10dp">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff"></solid>
        </shape>
    </item>
    <item android:right="3dp" android:bottom="3dp" android:left="3dp">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff"></solid>
        </shape>
    </item>

</layer-list>

img_1b6eebcb25b3e04cc2d0404f348518e3.png
image.png

4.StateListDrawable

对应着<Selector> 根据状态进行不同的操作.不做赘述.

LevelListDrawable

对应着<level-list>标签,它可以根据level不同,改变相应的drawable.额....感觉和直接setImageVIew差不多....

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:minLevel="0" android:maxLevel="3" android:drawable="@color/colorAccent"></item>
    <item android:minLevel="4" android:maxLevel="6" android:drawable="@color/colorPrimary"></item>
    <item android:minLevel="7" android:maxLevel="9" android:drawable="@color/colorPrimaryDark"></item>

</level-list>
//两种调用方式
  drawable.setLevel(0);
  imageView.setImageLevel(0);
目录
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的迁移学习:从理论到实践
科技进步不断推动人工智能的发展,其中深度学习已成为最炙手可热的领域。然而,训练深度学习模型通常需要大量的数据和计算资源,这对于许多实际应用来说是一个显著的障碍。迁移学习作为一种有效的方法,通过利用已有模型在新任务上的再训练,大大减少了数据和计算资源的需求。本文将详细探讨迁移学习的理论基础、各种实现方法以及其在实际应用中的优势和挑战。
|
3月前
|
人工智能 API Windows
实操教程:OpenClaw 对接 DeepSeek 大模型方法
本教程详解OpenClaw接入DeepSeek模型的完整流程:从环境准备、平台登录、实名认证、余额充值,到API密钥创建与保存,再到OpenClaw端配置、测试及模型选用(如deepseek-chat/v4-flash/v4-pro),最后提供自检清单与高频问题排障指南,助用户零基础快速完成本地AI智能体部署。(239字)
|
4月前
|
数据采集 人工智能 自然语言处理
OpenClaw 2.6.4 必装技能 电脑办公一站式方案(包含最新版安装包)
OpenClaw 2.6.4「小龙虾」推出15个实用Skill技能,覆盖文件管理、办公自动化、浏览器操作、系统维护及内容处理五大场景。小白零门槛启用,如自动整理桌面、生成周报、PDF处理、网页采集、系统检测等,一键执行多任务,大幅提升办公效率。
|
10月前
|
JSON API 开发工具
百宝箱开放平台 ✖️ 调用插件工具
开发者可通过调用百宝箱插件接口,在外部系统中使用其提供的各类工具。需在请求头中提供有效授权令牌,并在请求体中指定工具ID及参数,支持JSON格式通信,返回结果包含执行状态与数据详情。
799 0
|
7月前
|
自然语言处理 运维 UED
企业建站中如何选型多语言多站点的建站系统?
构建多语言或多站点网站时,选择合适的CMS至关重要。需先明确多语言需求、站点结构与内容范围;再选支持多站点、审批流、自定义表单及高扩展性的系统,最后进行兼容性测试,确保稳定运行,降低运维成本。
189 2
|
消息中间件 SQL 供应链
如何开发供应商管理系统中的库存管理板块(附架构图+流程图+代码参考)
供应商管理系统(SMS)是企业供应链管理的核心工具,通过信息化手段实现从采购、入库、出库到库存盘点的全流程管理。系统以供应商为中心,整合订单、发货、验收、库存等环节,提升供应链协同效率。库存管理作为关键模块,通过入库单、出库单、调拨单和盘点等功能,实现库存数据的实时更新与可视化监控,有效避免缺货或积压风险。结合现代技术如Spring Boot、Vue3、MySQL等,系统具备高可用性与灵活扩展性,助力企业提升库存周转率与运营效率。
|
存储 弹性计算 安全
Cloud Backup深度解析:从被动防御到主动保护
《Cloud Backup深度解析:从被动防御到主动保护》由阿里云高级技术专家张磊分享,探讨企业数据保护面临的挑战及应对策略。内容涵盖企业数据安全威胁、小概率事件的高风险性、传统备份系统的不足,以及通过四步主动防御策略(资源发现、风险检测、数据锁定、全局巡检)实现高效的数据保护。同时介绍了基于标签的自动策略关联、多种备份引擎、恶意文件检测、探测效率优化等关键技术,确保备份数据的安全性和完整性。此外,还展示了数据灾备中心和全方位主动数据保护机制,帮助企业在面对勒索病毒、内部攻击等威胁时,构建更强大的防护体系。
400 8