Android可绘制资源概览(背景、图形等)

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

目录

  • 一、导读
  • 二、概览
  • 三、drawable 分类
    • 3.1 Bitmap file
      • XML 位图
    • 3.2 Nine-patch file
    • 3.3 Layer list
    • 3.4 State list
    • 3.5 Level list
    • 3.6 Transition drawable
    • 3.7 Inset drawable
    • 3.8 Clip drawable
    • 3.9 Scale drawable
    • 3.10 Shape drawable.
  • 四、 推荐阅读

在这里插入图片描述

一、导读

我们继续总结学习Android 基础知识,温故知新。

二、概览

可绘制资源是图形的一般概念,是指可在屏幕上绘制的图形,以及可使用 getDrawable(int) 等 API 检索,或应用到具有 android:drawable 和 android:icon 等属性的其他 XML 资源的图形。

三、drawable 分类

3.1 Bitmap file

位图图形文件(PNG、WEBP、JPG 或 GIF)。 可创建 BitmapDrawable。

直接代码引用:

val drawable: Drawable? = ResourcesCompat.getDrawable(resources, R.drawable.myimage, null)
Resources res = getResources();
Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.myimage, null);

我们也可以为这些文件创建一个别名,即XML 位图。

XML 位图

XML 位图是在 XML 文件中定义的资源,指向位图文件,同时可以设置位图的其他属性,例如抖动和平铺

文件位置:res/drawable/filename.xml文件名即为资源 ID
<?xml version="1.0" encoding="utf-8"?>
<bitmapxmlns:android="http://schemas.android.com/apk/res/android"android:src="@[package:]drawable/drawable_resource"                       资源文件名称android:antialias=["true" | "false"]                                      启用或停用抗锯齿android:dither=["true" | "false"]                                         启用或停用位图抖动android:filter=["true" | "false"]                                         启用或停用位图过滤android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" | 定义位图的位置"fill_vertical" | "center_horizontal" | "fill_horizontal" |"center" | "fill" | "clip_vertical" | "clip_horizontal"]android:mipMap=["true" | "false"]                                          启用或停用 mipmap 提示android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />           定义平铺模式
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"android:src="@drawable/icon"android:gravity="bottom"android:tileMode="repeat" />

– 元素用可以作 元素的子项–

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item><bitmapandroid:gravity="bottom"android:src="@drawable/xyz" /></item>
</layer-list>

3.2 Nine-patch file

具有可伸缩区域的 PNG 文件,支持根据内容调整图像大小 (.9.png)。可创建 NinePatchDrawable。
同上

3.3 Layer list

管理其他可绘制对象数组的可绘制对象。这些可绘制对象按数组顺序绘制,因此索引最大的元素绘制于顶部。可创建 LayerDrawable。

通用说法,layer-list将多个图片或效果按照顺序层叠起来,通常和selector、shape配合使用.

语法

<?xml version="1.0" encoding="utf-8"?>
<layer-list                                                           包含一个或多个 <item> 元素xmlns:android="http://schemas.android.com/apk/res/android" ><item                   定义放于图层可绘制对象中的可绘制对象,位置由其属性定义。必须为 <layer-list> 元素的子项。接受子级 <bitmap> 元素。android:drawable="@[package:]drawable/drawable_resource"android:id="@[+][package:]id/resource_name"android:top="dimension"               顶部偏移量android:right="dimension"             右侧偏移量android:bottom="dimension"            底部偏移量android:left="dimension" />           左侧偏移量
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item><bitmapandroid:gravity="bottom"android:src="@drawable/xyz" /></item>
</layer-list>

3.4 State list

此 XML 文件用于为不同状态引用不同位图图形,例如,点按按钮时使用不同图像。可创建 StateListDrawable。

它会根据对象状态,使用多个图像来表示同一个图形。例如,Button widget 的状态可以是按下、聚焦或既不按下也不聚焦;而使用状态列表可绘制对象,您可以为每种状态提供不同的背景图像。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"  包含一个或多个 <item> 元素。android:constantSize=["true" | "false"] 如果可绘制对象报告的内部大小在状态变更时保持不变,则值为 true(大小是所有状态的最大值);如果大小根据当前状态而变化,则值为 false。默认值为 falseandroid:dither=["true" | "false"] 将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为 false 时则停用抖动。默认值为 trueandroid:variablePadding=["true" | "false"] > 如果可绘制对象的内边距根据当前所选状态而变化,则为 true;如果该内边距必须保持不变(基于所有状态的最大内边距),则为 false<itemandroid:drawable="@[package:]drawable/drawable_resource"android:state_pressed=["true" | "false"]  如果是在点按对象时(例如轻触按钮时)使用此项,则为 true;如果是在默认的非点按状态下使用此项,则为 false。android:state_focused=["true" | "false"]  如果是在对象具有输入焦点时(例如当用户选择文本输入时)使用此项,则为 true;如果是在默认的非聚焦状态下使用此项,则为 falseandroid:state_hovered=["true" | "false"]  如果是在光标悬停在对象上时使用此项,则为 true;如果是在默认的非悬停状态下使用此项,则为 false。通常情况下,这个可绘制对象可以是用于“聚焦”状态的同一可绘制对象android:state_selected=["true" | "false"] 如果是在使用定向控件进行导航(例如使用方向键浏览列表)时对象为用户当前选择时使用此项,则为 true;如果是在未选择对象时使用此项,则为 falseandroid:state_checkable=["true" | "false"] 如果是在对象可供选择时使用此项,则为 true;如果是在对象不可选择时使用此项,则为 false。仅适用于对象可在可选择和不可选择的 widget 之间转换的情况android:state_checked=["true" | "false"] 如果是在对象被选择时使用此项,则为 true;如果是在对象未被选择时使用此项,则为 falseandroid:state_enabled=["true" | "false"] 如果是在启用对象(即能够接收轻触或点击事件)时使用此项,则为 true;如果是在停用对象时使用此项,则为 falseandroid:state_activated=["true" | "false"] 如果是在对象处于永久选择启用状态(例如,在常驻导航视图中“突出显示”之前选择的列表项)时使用此项,则为 true;如果是在对象处于未启用状态时使用此项,则为 falseandroid:state_window_focused=["true" | "false"] /> 如果是在应用窗口具有焦点(即应用位于前台)时使用此项,则为 true;如果是在应用窗口没有焦点(例如通知栏下拉或出现一个对话框)时使用此项,则为 false。
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"android:drawable="@drawable/button_pressed" /> <!-- pressed --><item android:state_focused="true"android:drawable="@drawable/button_focused" /> <!-- focused --><item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

这个地方,我们也可以将图片(android:drawable)换成颜色(android:color)
ColorStateList 是一个可以在 XML 中定义并应用为颜色的对象,它实际上是根据所应用到的 View 对象的状态来改变颜色。
例如,Button widget 可以处于几种状态(即按下、聚焦或既不按下也不聚焦)中的一种。您可以使用颜色状态列表,为每种状态提供不同的颜色。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:color="hex_color"                          十六进制颜色android:lStar="floating_point_value"               修改基本颜色的感知亮度android:state_pressed=["true" | "false"]android:state_focused=["true" | "false"]android:state_selected=["true" | "false"]android:state_checkable=["true" | "false"]android:state_checked=["true" | "false"]android:state_enabled=["true" | "false"]android:state_window_focused=["true" | "false"] />
</selector>

eg:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"android:color="#ffff0000"/> <!-- pressed --><item android:state_focused="true"android:color="#ff0000ff"/> <!-- focused --><item android:color="#ff000000"/> <!-- default -->
</selector>

3.5 Level list

此 XML 文件用于定义管理大量备选可绘制对象的可绘制对象,每个可绘制对象都配有最大备选数量。可创建 LevelListDrawable。

<?xml version="1.0" encoding="utf-8"?>
<level-listxmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:drawable="@drawable/drawable_resource"android:maxLevel="integer"   此项允许的最高级别android:minLevel="integer" /> 此项允许的最低级别。
</level-list>

将此项应用到 View 后,您便可通过 setLevel() 或 setImageLevel() 更改级别

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:drawable="@drawable/status_off"android:maxLevel="0" /><itemandroid:drawable="@drawable/status_on"android:maxLevel="1" />
</level-list>

有时候需要对一个ImageView设置很多不同图片以表示某种应用状态,比如,典型的是手机的信号强度从强到弱有多种状态图;wifi有解锁和未解锁状态,解锁和未解锁状态的图标也是很多种。
如果每次都一一的通过ImageView设置图片的src来达到这一目的,实在是太过于繁琐,且维护和管理起来不便

3.6 Transition drawable

此 XML 文件用于定义可在两种可绘制资源之间交错淡出的可绘制对象。可创建 TransitionDrawable。

<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:drawable="@[package:]drawable/drawable_resource"android:id="@[+][package:]id/resource_name"android:top="dimension"android:right="dimension"android:bottom="dimension"android:left="dimension" />
</transition>

3.7 Inset drawable

此 XML 文件用于定义以指定距离插入其他可绘制对象的可绘制对象。当视图需要小于视图实际边界的背景可绘制对象时,此类可绘制对象非常有用。

<?xml version="1.0" encoding="utf-8"?>
<insetxmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/drawable_resource"android:insetTop="dimension"android:insetRight="dimension"android:insetBottom="dimension"android:insetLeft="dimension" />

3.8 Clip drawable

此 XML 文件用于定义对其他可绘制对象进行裁剪(根据其当前级别值)的可绘制对象。可创建 ClipDrawable。

<?xml version="1.0" encoding="utf-8"?>
<clipxmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/drawable_resource"android:clipOrientation=["horizontal" | "vertical"]android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |"fill_vertical" | "center_horizontal" | "fill_horizontal" |"center" | "fill" | "clip_vertical" | "clip_horizontal"] />

3.9 Scale drawable

此 XML 文件用于定义更改其他可绘制对象大小(根据其当前级别值)的可绘制对象。可创建 ScaleDrawable。

<?xml version="1.0" encoding="utf-8"?>
<scalexmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/drawable_resource"android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |"fill_vertical" | "center_horizontal" | "fill_horizontal" |"center" | "fill" | "clip_vertical" | "clip_horizontal"]android:scaleHeight="percentage"android:scaleWidth="percentage" />

3.10 Shape drawable.

此 XML 文件用于定义几何图形形状(包括颜色和渐变)。可创建 GradientDrawable。

<?xml version="1.0" encoding="utf-8"?>
<shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape=["rectangle" | "oval" | "line" | "ring"] ><corners                                             形状创建圆角。仅当形状为矩形时适用。android:radius="integer"android:topLeftRadius="integer"android:topRightRadius="integer"android:bottomLeftRadius="integer"android:bottomRightRadius="integer" /><gradient                                           指定形状的渐变颜色。android:angle="integer"android:centerX="float"android:centerY="float"android:centerColor="integer"android:endColor="color"android:gradientRadius="integer"android:startColor="color"android:type=["linear" | "radial" | "sweep"]android:useLevel=["true" | "false"] /><padding                                      要应用到所包含视图元素的内边距。这会填充视图内容的位置,而非形状。android:left="integer"android:top="integer"android:right="integer"android:bottom="integer" /><size                                             形状的大小。android:width="integer" android:height="integer" /><solid                                        用于填充形状的纯色。android:color="color" /><stroke                                       形状的描边线。android:width="integer"android:color="color"android:dashWidth="integer"android:dashGap="integer" />
</shape>

以上的一些元素,我们都是可以组合使用的

一个红色的层加一个白色的层叠在一起显示的结果
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><!--选中时的效果--!><item android:state_checked="true"><layer-list><!-- 红色背景 --><item><color android:color="#E4007F" /></item><!-- 白色背景 --><item android:bottom="4dp" android:drawable="@android:color/white" /></layer-list></item><!--默认时的效果--!><item><layer-list><!-- 红色背景 --><item><color android:color="#E4007F" /></item><!-- 白色背景 --><item android:bottom="1dp" android:drawable="@android:color/white" /></layer-list></item>
</selector>

再比如,带阴影的圆形矩阵是由一个灰色的层加上白色的层组成

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><!-- 灰色阴影 --><itemandroid:left="2dp"android:top="4dp"><shape><solid android:color="@android:color/darker_gray" /><corners android:radius="10dp" /></shape></item><!-- 白色前景 --><itemandroid:bottom="4dp"android:right="2dp"><shape><solid android:color="#FFFFFF" /><corners android:radius="10dp" /></shape></item>
</layer-list>

google

四、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

ddd

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

速学数据结构 | 链表实现队列究竟有什么优势?

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 &#x1f308;hello&#xff01; 各位宝子们大家好啊&#xff0c;栈区的实现我们前面已经讲了&#…

shell学习脚本05(小滴课堂)

可以对海量的数据进行提取。 -v对提取的内容进行取反。 -n显示出行号。 -w精确匹配&#xff1a; -i:忽略大小写&#xff1a; -E正则匹配&#xff1a; cut命令&#xff1a; -d指定分隔符&#xff0c;-f指定截取区域&#xff1a; 截取第一列到第三列&#xff1a; 截取第二列到最…

趋势:实时的stable diffusion

视频中使用了实时模型&#xff1a;只需2~4 个步骤甚至一步即可生成768 x 768分辨率图像。 这项技术可以把任意的stable diffusion模型转为实时模型。 潜在一致性模型 LCM LCM 只需 4,000 个训练步骤&#xff08;约 32 个 A100 GPU 一小时&#xff09;即可从任何预训练的SD模型中…

在markdown中怎么画表格

2023年11月5日&#xff0c;周日上午 下面是一种常用的方式来编写表格&#xff1a; | 列1标题 | 列2标题 | 列3标题 | |:------:|:------:|:------:| | 内容 | 内容 | 内容 | | 内容 | 内容 | 内容 |在这个示例中&#xff0c;第一行用于定义表格的列标…

论文阅读—— UniDetector(cvpr2023)

arxiv&#xff1a;https://arxiv.org/abs/2303.11749 github&#xff1a;https://github.com/zhenyuw16/UniDetector 一、介绍 通用目标检测旨在检测场景那种的一切目标。现有的检测器依赖于大量数据集 通用的目标检测器应该有两个能力&#xff1a;1、可以利用多种来…

asp.net人事管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 人事管理信息系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net 人事管理系统1 应用技术…

宠物医院服务预约小程序的效果如何

随着养宠家庭增多及对爱宠的照顾加深&#xff0c;除了食品、服饰外&#xff0c;宠物医院近些年也迎来了较高发展&#xff0c;部分城市甚至聚集着众多品牌&#xff0c;以单店或多店品牌的方式拓展市场。 对宠物医院来说&#xff0c;一般都是拓展同市客户&#xff0c;或者多门店…

强化学习的动态规划三

一、策略的改进 假设新的贪婪策略π0与旧的策略π效果相当&#xff0c;但并不优于π。由此得出vπvπ0&#xff0c;且根据之前的推导可以得出&#xff1a;对于所有的s∈S 这与贝尔曼最优方程相同&#xff0c;因此&#xff0c;vπ0是v∗&#xff0c;π和π0是最佳策略。因此&…

类和对象 下

构造函数 初始化列表 构造函数是在构造类的时候给对象赋初值&#xff0c;并不是给类的成员函数初始化&#xff0c;赋值可以赋多次&#xff0c;而初始化只能初始化一次&#xff0c;这里我们引入初始化列表来对成员函数进行初始化 初始化列表&#xff0c;以冒号 &#xff1a;开…

JavassmMYSQL宠物领养系统08465-计算机毕业设计项目选题推荐(附源码)

目 录 摘要 1 绪论 1.1课题背景及意义 1.2研究现状 1.3ssm框架介绍 1.3论文结构与章节安排 2 宠物领养系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 …

深入剖析:正则表达式的奥秘

简介 正则表达式&#xff08;Regular Expressions&#xff09;是一种强大的文本处理工具&#xff0c;一种用于匹配文本模式的字符串。它由特定的字符和操作符组成&#xff0c;用于定义一个搜索模式。这些搜索模式可以用于文本搜索、替换、验证和提取数据等多种用途。 以下是一…

火狐浏览器导入burpsuite CA 证书无法正常上网

当我们给火狐浏览器设置burpsuite代理&#xff0c;并给火狐导入了burpsuite的CA证书后&#xff0c;仍然无法上网的解决方法。 当我们把浏览器的代理配置好之后&#xff0c;浏览器导入证书&#xff0c;burpsuite设置好代理后&#xff0c;如上图&#xff0c;仍然无法上网&…