非微信官方网页自己做的网站,南昌一建集团有限公司,百度电商推广,海原网站建设关于作者#xff1a;CSDN内容合伙人、技术专家#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 #xff0c;擅长java后端、移动开发、商业变现、人工智能等#xff0c;希望大家多多支持。 目录 一、导读二、概览三、drawable 分类3.1 Bitmap fileXML … 关于作者CSDN内容合伙人、技术专家 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 擅长java后端、移动开发、商业变现、人工智能等希望大家多多支持。 目录 一、导读二、概览三、drawable 分类3.1 Bitmap fileXML 位图 3.2 Nine-patch file3.3 Layer list3.4 State list3.5 Level list3.6 Transition drawable3.7 Inset drawable3.8 Clip drawable3.9 Scale drawable3.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 version1.0 encodingutf-8?
bitmapxmlns:androidhttp://schemas.android.com/apk/res/androidandroid: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 version1.0 encodingutf-8?
bitmap xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:srcdrawable/iconandroid:gravitybottomandroid:tileModerepeat /– 元素用可以作 元素的子项–
?xml version1.0 encodingutf-8?
layer-list xmlns:androidhttp://schemas.android.com/apk/res/androiditembitmapandroid:gravitybottomandroid:srcdrawable/xyz //item
/layer-list
3.2 Nine-patch file
具有可伸缩区域的 PNG 文件支持根据内容调整图像大小 (.9.png)。可创建 NinePatchDrawable。 同上
3.3 Layer list
管理其他可绘制对象数组的可绘制对象。这些可绘制对象按数组顺序绘制因此索引最大的元素绘制于顶部。可创建 LayerDrawable。
通用说法layer-list将多个图片或效果按照顺序层叠起来,通常和selector、shape配合使用.
语法
?xml version1.0 encodingutf-8?
layer-list 包含一个或多个 item 元素xmlns:androidhttp://schemas.android.com/apk/res/android item 定义放于图层可绘制对象中的可绘制对象位置由其属性定义。必须为 layer-list 元素的子项。接受子级 bitmap 元素。android:drawable[package:]drawable/drawable_resourceandroid:id[][package:]id/resource_nameandroid:topdimension 顶部偏移量android:rightdimension 右侧偏移量android:bottomdimension 底部偏移量android:leftdimension / 左侧偏移量
/layer-list?xml version1.0 encodingutf-8?
layer-list xmlns:androidhttp://schemas.android.com/apk/res/androiditembitmapandroid:gravitybottomandroid:srcdrawable/xyz //item
/layer-list
3.4 State list
此 XML 文件用于为不同状态引用不同位图图形例如点按按钮时使用不同图像。可创建 StateListDrawable。
它会根据对象状态使用多个图像来表示同一个图形。例如Button widget 的状态可以是按下、聚焦或既不按下也不聚焦而使用状态列表可绘制对象您可以为每种状态提供不同的背景图像。
?xml version1.0 encodingutf-8?
selector xmlns:androidhttp://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如果该内边距必须保持不变基于所有状态的最大内边距则为 falseitemandroid:drawable[package:]drawable/drawable_resourceandroid: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 version1.0 encodingutf-8?
selector xmlns:androidhttp://schemas.android.com/apk/res/androiditem android:state_pressedtrueandroid:drawabledrawable/button_pressed / !-- pressed --item android:state_focusedtrueandroid:drawabledrawable/button_focused / !-- focused --item android:drawabledrawable/button_normal / !-- default --
/selector这个地方我们也可以将图片android:drawable换成颜色android:color ColorStateList 是一个可以在 XML 中定义并应用为颜色的对象它实际上是根据所应用到的 View 对象的状态来改变颜色。 例如Button widget 可以处于几种状态即按下、聚焦或既不按下也不聚焦中的一种。您可以使用颜色状态列表为每种状态提供不同的颜色。
?xml version1.0 encodingutf-8?
selector xmlns:androidhttp://schemas.android.com/apk/res/android itemandroid:colorhex_color 十六进制颜色android:lStarfloating_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] /
/selectoreg
?xml version1.0 encodingutf-8?
selector xmlns:androidhttp://schemas.android.com/apk/res/androiditem android:state_pressedtrueandroid:color#ffff0000/ !-- pressed --item android:state_focusedtrueandroid:color#ff0000ff/ !-- focused --item android:color#ff000000/ !-- default --
/selector3.5 Level list
此 XML 文件用于定义管理大量备选可绘制对象的可绘制对象每个可绘制对象都配有最大备选数量。可创建 LevelListDrawable。
?xml version1.0 encodingutf-8?
level-listxmlns:androidhttp://schemas.android.com/apk/res/android itemandroid:drawabledrawable/drawable_resourceandroid:maxLevelinteger 此项允许的最高级别android:minLevelinteger / 此项允许的最低级别。
/level-list将此项应用到 View 后您便可通过 setLevel() 或 setImageLevel() 更改级别。
?xml version1.0 encodingutf-8?
level-list xmlns:androidhttp://schemas.android.com/apk/res/android itemandroid:drawabledrawable/status_offandroid:maxLevel0 /itemandroid:drawabledrawable/status_onandroid:maxLevel1 /
/level-list有时候需要对一个ImageView设置很多不同图片以表示某种应用状态比如典型的是手机的信号强度从强到弱有多种状态图wifi有解锁和未解锁状态解锁和未解锁状态的图标也是很多种。 如果每次都一一的通过ImageView设置图片的src来达到这一目的实在是太过于繁琐且维护和管理起来不便
3.6 Transition drawable
此 XML 文件用于定义可在两种可绘制资源之间交错淡出的可绘制对象。可创建 TransitionDrawable。
?xml version1.0 encodingutf-8?
transition
xmlns:androidhttp://schemas.android.com/apk/res/android itemandroid:drawable[package:]drawable/drawable_resourceandroid:id[][package:]id/resource_nameandroid:topdimensionandroid:rightdimensionandroid:bottomdimensionandroid:leftdimension /
/transition3.7 Inset drawable
此 XML 文件用于定义以指定距离插入其他可绘制对象的可绘制对象。当视图需要小于视图实际边界的背景可绘制对象时此类可绘制对象非常有用。
?xml version1.0 encodingutf-8?
insetxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:drawabledrawable/drawable_resourceandroid:insetTopdimensionandroid:insetRightdimensionandroid:insetBottomdimensionandroid:insetLeftdimension /3.8 Clip drawable
此 XML 文件用于定义对其他可绘制对象进行裁剪根据其当前级别值的可绘制对象。可创建 ClipDrawable。
?xml version1.0 encodingutf-8?
clipxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:drawabledrawable/drawable_resourceandroid: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 version1.0 encodingutf-8?
scalexmlns:androidhttp://schemas.android.com/apk/res/androidandroid:drawabledrawable/drawable_resourceandroid:scaleGravity[top | bottom | left | right | center_vertical |fill_vertical | center_horizontal | fill_horizontal |center | fill | clip_vertical | clip_horizontal]android:scaleHeightpercentageandroid:scaleWidthpercentage /3.10 Shape drawable.
此 XML 文件用于定义几何图形形状包括颜色和渐变。可创建 GradientDrawable。
?xml version1.0 encodingutf-8?
shapexmlns:androidhttp://schemas.android.com/apk/res/androidandroid:shape[rectangle | oval | line | ring] corners 形状创建圆角。仅当形状为矩形时适用。android:radiusintegerandroid:topLeftRadiusintegerandroid:topRightRadiusintegerandroid:bottomLeftRadiusintegerandroid:bottomRightRadiusinteger /gradient 指定形状的渐变颜色。android:angleintegerandroid:centerXfloatandroid:centerYfloatandroid:centerColorintegerandroid:endColorcolorandroid:gradientRadiusintegerandroid:startColorcolorandroid:type[linear | radial | sweep]android:useLevel[true | false] /padding 要应用到所包含视图元素的内边距。这会填充视图内容的位置而非形状。android:leftintegerandroid:topintegerandroid:rightintegerandroid:bottominteger /size 形状的大小。android:widthinteger android:heightinteger /solid 用于填充形状的纯色。android:colorcolor /stroke 形状的描边线。android:widthintegerandroid:colorcolorandroid:dashWidthintegerandroid:dashGapinteger /
/shape
以上的一些元素我们都是可以组合使用的
一个红色的层加一个白色的层叠在一起显示的结果
?xml version1.0 encodingutf-8?
selector xmlns:androidhttp://schemas.android.com/apk/res/android!--选中时的效果--!item android:state_checkedtruelayer-list!-- 红色背景 --itemcolor android:color#E4007F //item!-- 白色背景 --item android:bottom4dp android:drawableandroid:color/white //layer-list/item!--默认时的效果--!itemlayer-list!-- 红色背景 --itemcolor android:color#E4007F //item!-- 白色背景 --item android:bottom1dp android:drawableandroid:color/white //layer-list/item
/selector再比如,带阴影的圆形矩阵是由一个灰色的层加上白色的层组成
?xml version1.0 encodingutf-8?
layer-list xmlns:androidhttp://schemas.android.com/apk/res/android!-- 灰色阴影 --itemandroid:left2dpandroid:top4dpshapesolid android:colorandroid:color/darker_gray /corners android:radius10dp //shape/item!-- 白色前景 --itemandroid:bottom4dpandroid:right2dpshapesolid android:color#FFFFFF /corners android:radius10dp //shape/item
/layer-listgoogle
四、 推荐阅读
Java 专栏
SQL 专栏
数据结构与算法
Android学习专栏