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

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签