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
           定义平铺模式

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


    
        
    


3.2 Nine-patch file

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

同上

3.3 Layer list

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

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

语法

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


    
        
    


3.4 State list

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

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

<selector xmlns:android="http://schemas.android.com/apk/res/android"  包含一个或多个  元素。
    android:constantSize=["true" | "false"] 如果可绘制对象报告的内部大小在状态变更时保持不变,则值为 true(大小是所有状态的最大值);如果大小根据当前状态而变化,则值为 false。默认值为 false
    android:dither=["true" | "false"] 将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为 false 时则停用抖动。默认值为 true
    android:variablePadding=["true" | "false"] > 如果可绘制对象的内边距根据当前所选状态而变化,则为 true;如果该内边距必须保持不变(基于所有状态的最大内边距),则为 false
     如果是在应用窗口具有焦点(即应用位于前台)时使用此项,则为 true;如果是在应用窗口没有焦点(例如通知栏下拉或出现一个对话框)时使用此项,则为 false。


     
     
     

这个地方,我们也可以将图片(android:drawable)换成颜色(android:color)

ColorStateList 是一个可以在 XML 中定义并应用为颜色的对象,它实际上是根据所应用到的 View 对象的状态来改变颜色。

例如,Button widget 可以处于几种状态(即按下、聚焦或既不按下也不聚焦)中的一种。您可以使用颜色状态列表,为每种状态提供不同的颜色。


    

eg:


     
     
     

3.5 Level list

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


     此项允许的最低级别。

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


    
    

有时候需要对一个ImageView设置很多不同图片以表示某种应用状态,比如,典型的是手机的信号强度从强到弱有多种状态图;wifi有解锁和未解锁状态,解锁和未解锁状态的图标也是很多种。

如果每次都一一的通过ImageView设置图片的src来达到这一目的,实在是太过于繁琐,且维护和管理起来不便

3.6 Transition drawable

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


    

3.7 Inset drawable

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


3.8 Clip drawable

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


3.9 Scale drawable

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


3.10 Shape drawable.

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

 矩形、椭圆形、线形、环形
    
    
    
    
    
    


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

一个红色的层加一个白色的层叠在一起显示的结果


   

    
        
            
            
                
            
            
            
        
    
 

    
        
            
            
                
            
            
            
        
    

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


    
    
        
            
            
        
    
    
    
        
            
            
        
    

google

四、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

ddd

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/4d7eb96f45.html