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

智能推荐

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

分布式系统_分布式系统运维工具-程序员宅基地

文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具

用Exce分析l数据极简入门_exce l趋势分析数据量-程序员宅基地

文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量

宁盾堡垒机双因素认证方案_horizon宁盾双因素配置-程序员宅基地

文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置

谷歌浏览器安装(Win、Linux、离线安装)_chrome linux debian离线安装依赖-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖

烤仔TVの尚书房 | 逃离北上广?不如押宝越南“北上广”-程序员宅基地

文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...

随便推点

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码

AUTOSAR基础篇之OS(下)_autosar 定义了 5 种多核支持类型-程序员宅基地

文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型

VS报错无法打开自己写的头文件_vs2013打不开自己定义的头文件-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件

【Redis】Redis基础命令集详解_redis命令-程序员宅基地

文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令

URP渲染管线简介-程序员宅基地

文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线