• XML Drawable与9-Patches


    可绘制对象资源
    两种设计工具均属于drawable。Android把任何可绘制在屏幕上的图形图像都称为drawable
    drawable可以是一种抽象的图形、一个继承 Drawable 类的子类,或者是一张位图图像。

    分类:
    drawable:
    ->位图文件 BitmapDrawable
    位图图像。Android 支持以下三种格式的位图文件:.png(首选)、.jpg(可接受)、.gif(不建议)。
    当您将这些文件保存到 res/drawable/ 目录中时,Android 将为它们创建 Drawable 资源。
    资源引用:
    在 Java 中:R.drawable.filename
    在 XML 中:@[package:]drawable/filename
    ->XML 位图
    语法:

    <?xml version="1.0" encoding="utf-8"?>
    <bitmap
    xmlns: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(重复交替)"]
    //关键字。定义平铺模式。当平铺模式启用时,位图会重复。重力在平铺模式启用时将被忽略。
    
    />


    ->九宫格文件 NinePatchDrawable
    ->
    是一种 PNG 图像,在其中可定义当视图中的内容超出正常图像边界时 Android 缩放的可拉伸区域。
    此类图像通常指定为至少有一个尺寸设置为 "wrap_content" 的视图的背景,
    而且当视图扩展以适应内容时,九宫格图像也会扩展以匹配视图的大小。
    Android 的标准 Button 小部件使用的背景就是典型的九宫格图像,
    其必须拉伸以适应按钮内的文本(或图像)。
    ->XML 九宫格

    <?xml version="1.0" encoding="utf-8"?>
    <nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] //抖动
    />



    ->图层列表 LayerDrawable
    ->
    是管理其他可绘制对象阵列的可绘制对象。列表中的每个可绘制对象按照列表的顺序绘制,
    列表中的最后一个可绘制对象绘于顶部。
    每个可绘制对象由单一 <layer-list> 元素内的 <item> 元素表示。
    ->语法

    <?xml version="1.0" encoding="utf-8"?>
    <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" />
    </layer-list>



    需要注意的是每个item必须是一个<selector> 元素的子项
    ->状态列表 StateListDrawable
    ->
    是在 XML 中定义的可绘制对象,它根据对象的状态,使用多个不同的图像来表示同一个图形。
    例如,Button 小部件可以是多种不同状态(按下、聚焦或这两种状态都不是)中的其中一种,
    而且可以利用状态列表可绘制对象为每种状态提供不同的背景图片。
    您可以在 XML 文件中描述状态列表。每个图形由单一 <selector> 元素内的 <item> 元素表示。
    每个 <item> 均使用各种属性来描述应用作可绘制对象的图形的状态。
    在每个状态变更期间,将从上到下遍历状态列表,并使用第一个与当前状态匹配的项目
    —此选择并非基于“最佳匹配”,而是选择符合状态最低条件的第一个项目。
    ->语法

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"] //大小是否变化
    android:dither=["true" | "false"]    //是否抖动
    android:variablePadding=["true" | "false"] //是否改变内边距
    
    >
    <item
    android:drawable="@[package:]drawable/drawable_resource"
    android:state_pressed=["true" | "false"] //如果在按下对象(例如触摸/点按某按钮)
    android:state_focused=["true" | "false"] //如果在对象具有输入焦点(例如当用户选择文本输入时
    android:state_hovered=["true" | "false"] //如果当光标悬停在对象上时应使用此项目
    android:state_selected=["true" | "false"] //如果在使用定向控件浏览(例如使用方向键浏览列表)的情况下对象为当前用户选择时应使用此项目
    android:state_checkable=["true" | "false"] //如果当对象可选中时应使用此项目
    android:state_checked=["true" | "false"] //如果在对象已选中时应使用此项目
    android:state_enabled=["true" | "false"] //如果在对象启用(能够接收触摸/点击事件)时应使用此项目
    android:state_activated=["true" | "false"] //如果在对象激活作为持续选择(例如,在持续导航视图中“突出显示”之前选中的列表项)时应使用此项目
    android:state_window_focused=["true" | "false"] //如果当应用窗口有焦点(应用在前台)时应使用此项目
    
    />
    </selector>


    ->层级列表 LevelListDrawable
    ->管理大量备选可绘制对象的可绘制对象,每个可绘制对象都分配有最大的备选数量。
    使用 setLevel() 设置可绘制对象的级别值会加载级别列表中
    android:maxLevel 值大于或等于传递到方法的值的可绘制对象资源。
    ->语法

    <?xml version="1.0" encoding="utf-8"?>
    <level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
    android:drawable="@drawable/drawable_resource"
    android:maxLevel="integer" //最高层级
    android:minLevel="integer"    //最低层级
    />
    </level-list>


    ->转换可绘制对象 TransitionDrawable
    -> 是可在两种可绘制对象资源之间交错淡出的可绘制对象。
    每个可绘制对象由单一 <transition> 元素内的 <item> 元素表示。不支持超过两个项目。
    要向前转换,请调用 startTransition()。要向后转换,则调用 reverseTransition()。
    ->语法

    <?xml version="1.0" encoding="utf-8"?>
    <transition
    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" 
    />
    </transition>


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

    <?xml version="1.0" encoding="utf-8"?>
    <inset
    xmlns: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" 
    />



    ->裁剪可绘制对象 ClipDrawable
    ->
    在 XML 文件中定义的对其他可绘制对象进行裁剪(根据其当前级别)的可绘制对象。
    您可以根据级别以及用于控制其在整个容器中位置的重力,
    来控制子可绘制对象的裁剪宽度和高度。通常用于实现进度栏之类的项目。
    ->语法

    <?xml version="1.0" encoding="utf-8"?>
    <clip
    xmlns: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"] 


    //指定可绘制对象中要裁剪的位置
    />
    ->缩放可绘制对象 ScaleDrawable
    ->
    在 XML 文件中定义的更改其他可绘制对象大小(根据其当前级别)的可绘制对象。
    ->语法

    <?xml version="1.0" encoding="utf-8"?>
    <scale
    xmlns: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" //缩放宽度
    />


    ->形状可绘制对象 ShapeDrawable
    ->语法

    <?xml version="1.0" encoding="utf-8"?>
    <shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line 水平线,此形状需要 <stroke> 元素定义线宽," | "ring"] >
    <corners    //为形状产生圆角。仅当形状为矩形时适用。
    android:radius="integer" 
    android:topLeftRadius="integer"
    android:topRightRadius="integer"
    android:bottomLeftRadius="integer"
    android:bottomRightRadius="integer" />
    <gradient //指定形状的渐变颜色。
    android:angle="integer" //渐变的角度(度),按x轴的方向来判断
    android:centerX="float" //渐变中心的相对 X 轴位置(0-1)
    android:centerY="float"    //渐变中心的相对 Y 轴位置(0-1)
    android:centerColor="integer"//起始颜色与结束颜色之间的可选颜色
    android:endColor="color"    //结束颜色
    android:gradientRadius="integer" //渐变的半径。仅在 android:type="radial" 时适用。
    android:startColor="color"    //开始颜色
    android:type=["linear" | "radial" | "sweep"] //渐变类型
    android:useLevel=["true" | "false"] //是否用作 LevelListDrawable
    />
    <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>


    Hold on, everything is possible.
  • 相关阅读:
    使用kbmmw 生成REST 服务OpenAPI函数原型
    kbmmw 5.08 正式发布
    在datasnap 中使用unidac 访问数据(客户端)
    使用双引擎,让kbmmw 的客户端访问更方便
    使用kbmMWConfiguration 让 kbmmw smartservice 更聪明
    CE lua脚本
    error LNK2019: 无法解析的外部符号 __vsnwprintf,该符号在函数 "long __stdcall StringVPrintfWorkerW
    安装 directx sdk 出现 S1023 解决
    dx11的一些数据结构
    git 比较 change to be committed
  • 原文地址:https://www.cnblogs.com/student-note/p/6093951.html
Copyright © 2020-2023  润新知