Drawable资源_drawable 资源-程序员宅基地

技术标签: Android学习笔记  

Drawable资源是对图像的一个抽象,你可以通过getDrawable(int)得到并绘制到屏幕上。这里有几种不同类型的Drawable: 

Bitmap File 
    一个Bitmap图像文件(.png、.jpg或.gif)。BitmapDrawable。 
Nine-Patch File 
    一个带有伸缩区域的PNG文件,可以基于content伸缩图片(.9.png)。NinePatchDrawable。 
State List 
    一个XML文件,为不同的状态引用不同的Bitmap图像(例如,当按钮按下时使用不同的图片)。StateListDrawable。 
Color 
    定义在XML中的资源,指定一个矩形(圆角可以有)的颜色。PaintDrawable。 
Shape 
    一个XML文件,定义了一个几何形状,包括颜色和渐变。ShapeDrawable。 

AnimationDrawable资源的说明在【Animation资源】文章中。 

Bitmap File 

基本的Bitmap图像。Android支持几种不同格式的Bitmap文件:.png(最佳)、.jpg(可接受)、.gif(不要)。 
注意:Bitmap文件可能会被aapt工具进行无损图像压缩优化。例如,一个真彩色的PNG(不超过256色)可能会被转换成一个带有颜色板的8位PNG。这样做能保证图片质量一样,但减少内存占用。因此,需要了解的是放在这个文件夹下的二进制图像在编译时可能会发生变更。如果你打算以位流方式读取图像来转化成Bitmap的话,可以把它们放到res/raw文件中,在这里,它们不会被优化。 

File Location: 
    res/drawable/filename.png (.png, .jpg, 或.gif) 
    文件名会被当作资源ID使用。 
Complied Resource Datatype: 
    指向BitmapDrawable的资源指针。 
Resource Reference: 
    R.drawable.filename(Java) 
    @[package:]drawable/filename(XML) 
Example: 
    在res/drawable/myimage.png位置保存了一张图片,在Layout XML中可以应用这个图片到一个View上: 
    <ImageView 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:src="@drawable/myimage" /> 

    下面的代码可以以Drawable方式得到图片: 
    Resources res = getResources(); 
    Drawable drawable = res.getDrawable(R.drawable.myimage); 

Nine-Patch File 

NinePatch是一种PNG图像,可以定义拉伸区域,当View的content超出图像边界的话,Android会拉伸它。典型用法是把这个图像设置为View的背景,而这个View至少有一个尺寸设置为“wrap_content”,当这个View变大来容纳content时,Nine-Patch图像也会拉伸来匹配View的大小。 

File Location: 
    res/drawable/filename.9.png 
    文件名将被当作资源ID使用。 
Complied Resource Datatype: 
    指向NinePatchDrawable的资源指针。 
Resource Reference: 
    R.drawable.filename(Java) 
    @[package:]drawable/filename(XML) 
Example: 
    在res/drawable/myninepatch.9.png位置保存了一张图片,在Layout XML中可以应用这个图片到一个View上: 
    <Button 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:background="@drawable/myninepatch" /> 

State List 

StateListDrawable是定义在XML中的Drawable对象,能根据状态来呈现不同的图像。例如,Button存在多种不同的状态(pressed、focused或other),使用StateListDrawable,你可以为Button的每个状态提供不同的按钮图像。 

你可以在XML文件中描述状态列表。在<selector>元素里的每个<item>代表每个图像。每个<item>使用不同的特性来描述使用的时机。 

当每次状态改变时,StateList都会从上到下遍历一次,第一个匹配当前状态的item将被使用——选择的过程不是基于“最佳匹配”,只是符合state的最低标准的第一个item。 

File Location 
    Res/drawable/filename.xml 
    文件名将被当作资源ID使用。 
Complied Resource Datatype: 
    指向StateListDrawable的资源指针。 
Resource Reference: 
    R.drawable.filename(Java) 
    @[package:]drawable/filename(XML) 
Syntax: 
<?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_selected=["true" | "false"] 
        android:state_active=["true" | "false"] 
        android:state_checkable=["true" | "false"] 
        android:state_checked=["true" | "false"] 
        android:state_enabled=["true" | "false"] 
        android:state_window_focused=["true" | "false"] />  
</selector> 
Elements: 
    <selector> 
    必须。必须是根元素。可以包含一个或多个<item>元素。 
    Attributes: 
        xmlns:android 
                  String。必须。定义XML的命名空间,必须是 
                  “http://schemas.android.com/apk/res/android”。 
              android:constantSize 
           Boolean。“true”表示随着状态变化,Drawable的大小保持不变(所有状态中最大的size);“false”表示大小会变化。默认是false。 
              android:dither 
Boolean。“true”表示当Bitmap和屏幕的不是相同的像素设定时支持Bitmap抖动(例如,ARGB 8888的Bitmap和RGB 565的屏幕);“false”表示不支持。默认是“true”。 
              android:variablePadding 
                     Boolean。“true”表示Drawable的Padding可以变化;“false”表示Padding保持相同(所有状态的最大Padding)。使能这一特征需要在状态变化时处理Layout,一般都不支持。默认值是false。 
    <item> 
              定义特定状态的Drawable,通过它的特性指定。必须是<selector>的子元素。 
              Attributes: 
                  android:drawable 
                            Drawable资源。必须。指向一个Drawable资源。 
    android:state_pressed 
Boolean。“true”表示按下状态使用(例如按钮按下);“false”表示非按下状态使用。 
                  android:state_focused 
Boolean。“true”表示聚焦状态使用(例如使用滚动球/D-pad聚焦Button);“false”表示非聚焦状态使用。 
                  android:state_selected 
Boolean。“true”表示选中状态使用(例如Tab打开);“false”表示非选中状态使用。 
                  android:state_checkable 
Boolean。“true”表示可勾选状态时使用;“false”表示非可勾选状态使用。(只对能切换可勾选—非可勾选的构件有用。) 
                  android:state_checked 
                            Boolean。“true”表示勾选状态使用;“false”表示非勾选状态使用。 
                  android:state_enabled 
Boolean。“true”表示可用状态使用(能接收触摸/点击事件);“false”表示不可用状态使用。 
                  android:window_focused 
Boolean。“true”表示应用程序窗口有焦点时使用(应用程序在前台);“false”表示无焦点时使用(例如Notification栏拉下或对话框显示)。 
注意:记住一点,StateList中第一个匹配当前状态的item会被使用。因此,如果第一个item没有任何状态特性的话,那么它将每次都被使用,这也是为什么默认的值必须总是在最后(如下面的例子所示)。 

Example: 
    XML文件保存在res/drawable/button.xml。 
<?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> 
    Layout XML将这个Drawable应用到一个View上: 
<ImageView 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:src="@drawable/button" /> 

Color 

定义在XML中的color,可以当作Drawable使用,来填充矩形区域(圆角可以有)。这种Drawable的行为很像是颜色填充。 
注意:Color Drawable是一种简单的资源,可以使用name特性来引用其值(不再是XML文件的名)。因此,你可以在一个XML文件中的<resources>元素下添加多个Color Drawable。 

File Location: 
    res/drawable/filename.xml 
    文件名随意。元素的name将会当作资源ID使用。 
Complied Resource Datatype: 
    指向PaintDrawable资源的指针。 
Resource Reference: 
    R.drawable.color_name(Java) 
    @[package:]drawable/color_name(XML) 
Syntax: 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <drawable name="color_name" 
        >color</drawable> 
</resources> 
Elements: 
    <resources> 
           必须。必须是根节点。 
           没有特性。 
    <drawable> 
一个color Drawable。其值可以是任何有效的十六进制颜色值或者Color资源。Color值总是以“#”开头,后面紧跟Alpha-Red-Green-Blue信息,格式是:#RGB、#ARGB或者#AARRGGBB。 
              Attributes: 
                  name 
                            String。必须。Color的名字。这个名字将被当作资源ID使用。 
Example: 
    XML文件保存在res/drawable/color.xml。 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <drawable name="solid_red">#f00</drawable> 
    <drawable name="solid_blue">#0000ff</drawable> 
</resources> 
    Layout XML将会把这个Color Drawable应用到一个View上: 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/solid_blue" /> 
    代码中获取Color Drawable并应用到View上: 
Resources res =  getResources(); 
Drawable redDrawable = res.getDrawable(R.drawable.solid_red); 

TextView tv = (TextView) findViewByID(R.id.text); 
tv.setBackground(redDrawable); 

Shape 

定义在XML中的几何形状。 



File Location: 

    res/drawable/filename.xml 

    文件名将被当作资源ID使用。 

Complied Resource Datatype: 

    指向ShapeDrawable的资源指针。 

Resource Reference: 

    R.drawable.filename(Java) 

    @[package:]drawable/filename(XML) 

Syntax: 

<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:android="http://schemas.android.com/apk/res/android" 

    android:shape=["rectangle" | "oval" | "line" | "ring"] > 

    <gradient 

        android:angle="integer" 

        android:centerX="integer" 

        android:centerY="integer" 

        android:centerColor="integer" 

        android:endColor="color" 

        android:gradientRadius="integer" 

        android:startColor="color" 

        android:type=["linear" | "radial" | "sweep"] 

        android:usesLevel=["true" | "false"] /> 

    <solid 

        android:color="color" /> 

    <stroke 

        android:width="integer" 

        android:color="color" 

        android:dashWidth="integer" 

        android:dashGap="integer" /> 

    <padding 

        android:left="integer" 

        android:top="integer" 

        android:right="integer" 

        android:bottom="integer" /> 

    <corners 

        android:radius="integer" 

        android:topLeftRadius="integer" 

        android:topRightRadius="integer" 

        android:bottomLeftRadius="integer" 

        android:bottomRightRadius="integer" /> 

</shape> 

Elements: 

    <shape> 

              必须。必须是根元素。 

    Attributes: 

              android:shape 

                  Keyword。定义Shape的类型。有效的值包括: 

Value 
Desciption 

"rectangle" 
矩形。默认形状。 

"oval" 
椭圆。 

"line" 
水平直线。需要<stroke>元素定义线的宽度。 

"ring" 
环形。 




接下来的特性只能在android:shape=”ring”时使用: 

              android:innerRadius 

                  Dimension。内环的半径。 

              android:innerRadiusRatio 

         Float。以环的宽度比率来表示内环的半径。例如,如果android:innerRadiusRatio=”5”,内环半径等于环的宽度除以5。这个值可以被android:innerRadius覆盖。默认值是9。 

              android:thickness 

                  Dimension。环的厚度。 

              android:thicknessRatio 

          Float。以环的宽度比率来表示环的厚度。例如,如果android:thicknessRatio=”2”,厚度就等于环的宽度除以2。这个值可以被android:thickness覆盖。默认值是3。 

              android:useLevel 

                  Boolean。“true”表示可以当作LevelListDrawable使用。一般都为“false”。 

   

<gradient> 

              为Shape指定渐变色。 

Attributes: 

              android:angle 

Integer。渐变色的角度值。0表示从左到右,90表示从下到上。必须是45的倍数,默认是0。 

              android:centerX 

                  Float。渐变色中心的X相对位置(0-1.0)。当android:type=”linear”时无效。 

              android:centerY 

                  Float。渐变色中心的Y相对位置(0-1.0)。当android:type=”linear”时无效。 

              android:centerColor 

                  Color。可选的颜色,出现在start和end颜色之间。 

              android:endColor 

                  Color。end颜色。 

              android:gradientRadius 

                  Float。渐变色的半径。当android:type=”radial”时有效。 

              android:startColor 

                  Color。start颜色。 

android:type 

                  Keyword。渐变色的样式。有效值为: 

Value 
Description 

"linear" 
线性渐变,默认值。 

"radial" 
环形渐变。start颜色是处于中间的颜色。 

"sweep" 
sweep渐变 


              android:useLevel 

                  Boolean。“true”表示可以当作LevelListDrawable使用。 

   

<solid> 

              填充shape的单一色。 

Attributes: 

    android:color 

                  Color。这个颜色会应用到shape上。 

   

<stroke> 

              shape的线形。 

    Attributes: 

              android:width 

                  Dimension。线的厚度。 

              android:color 

                  Color。线的颜色。 

              android:dashGap 

                  Dimension。间断线间的距离。仅在android:dashWidth设定时有效。 

              android:dashWidth 

                  Dimension。间断线的大小。仅在android:dashGap设定时有效。 



    <padding> 

              内部View元素的边距。 

    Attributes: 

              android:left 

                  Dimension。左内边距。 

              android:top 

                  Dimension。上内边距。 

              android:right 

                  Dimension。右内边距。 

              android:bottom 

                  Dimension。下内边距。 



    <corners> 

              为shape创建圆角。当shape是一个矩形时有效。 

    Attributes: 

              android:radius 

                  Dimension。圆角的半径。会被下面的特性覆盖。 

              android:topLeftRadius 

                  Dimension。左上圆角半径。 

              android:topRightRadius 

                  Dimension。右上圆角半径。 

              android:bottomLeftRadius 

                  Dimension。左下圆角半径。 

              android:bottomRightRadius 

                  Dimension。右下圆角半径。 



Examples: 

    XML文件保存在res/drawable/gradient_box.xml 




<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient  
        android:startColor="#FFFF0000"  
        android:endColor="#80FF00FF" 
        android:angle="45"/> 
    <padding android:left="7dp"  
        android:top="7dp" 
        android:right="7dp"  
        android:bottom="7dp" /> 
    <corners android:radius="8dp" /> 
</shape> 
    Layout XML将被当作ShapeDrawable应用到一个View上: 
<TextView 
    android:background="@drawable/gradient_box" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" /> 
    代码中也可以获得ShapeDrawable,然后应用到View上: 
Resources res = getResources(); 
Drawable shape = res. getDrawable(R.drawable.gradient_box); 

TextView tv = (TextView)findViewByID(R.id.textview); 
tv.setBackground(shape); 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaoshengguoguo/article/details/9224365

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签