• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android入门——Drawable与对应的资源xml的应用

Android入门——Drawable与对应的资源xml的应用

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android drawable xml,android drawable资源,android gif drawable,android 获取drawable,android drawable等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android入门——Drawable与对应的资源xml的应用


引言

Android 中的Drawable是一个抽象的概念,换言之所有能被画出来的都可以定义成Drawable(A Drawable is a general abstraction for “something that can be drawn.” )。所以Android应用中使用最为广泛和最灵活的资源,不仅仅可以直接使用.png、.9.png、.gif、.jpg等图片作为资源,还可以使用多种XML文件。

一、Drawable概述

Drawable同时也是一个抽象类,我们在Android开发中不直接使用,往往都是使用它的派生类,常见的派生类有:BitmapDrawable, ClipDrawable, ColorDrawable, DrawableContainer, GradientDrawable, InsetDrawable, LayerDrawable, NinePatchDrawable, PictureDrawable, RotateDrawable, ScaleDrawable, ShapeDrawable,AnimationDrawable, LevelListDrawable, PaintDrawable, StateListDrawable, TransitionDrawable。在程序中我们可以通过Resource类的getDrawable(int id,int theme)获取对应的Drawable对象。

二、Drawable系的应用

1、StateListDrawable(selector xml文件)

说起selector xml文件大家都知道,但是StateListDrawable我相信有相当数量的人员不一定了解。StateListDrawable可以用于组织多个Drawable对象,常被用于view的背景、前景,当view的状态改变的时候而自动切换。

1.1、StateListDrawable对象的xml文件结构

对应的根元素为selector,可以包含多个item元素

android:color或者android:drawable:可设置指定颜色或Drawable对象 adnroid:state_xxx:一个特定的状态
状态属性值 含义
android:state_active 是否处于激活状态
android:state_checkable 是否可勾选
android:state_checked 是否已勾选
android:state_enabled 是否可用
android:state_first 是否开始状态
android:state_focused 是否已得到焦点
android:state_last 是否处于结束
android:state_middle 是否处于中间
android:state_pressed 是否处于按下状态 .
android:state_selected 是否处于选中状态
android:state_window_focused 是否窗口已获得焦点

例:selector_mybutton.xml

<code class=" hljs xml"><!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%20%3F%2D%2D%3E-->   
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!--{cke_protected}{C}%3C!%2D%2D%20%E9%BB%98%E8%AE%A4%E6%97%B6%E7%9A%84%E8%83%8C%E6%99%AF%E5%9B%BE%E7%89%87%2D%2D%3E-->  
  <item android:drawable="@drawable/pic1">    
<!--{cke_protected}{C}%3C!%2D%2D%20%E6%B2%A1%E6%9C%89%E7%84%A6%E7%82%B9%E6%97%B6%E7%9A%84%E8%83%8C%E6%99%AF%E5%9B%BE%E7%89%87%20%2D%2D%3E-->  
  <item android:state_window_focused="false" android:drawable="@drawable/pic_nofocus">   
<!--{cke_protected}{C}%3C!%2D%2D%20%E9%9D%9E%E8%A7%A6%E6%91%B8%E6%A8%A1%E5%BC%8F%E4%B8%8B%E8%8E%B7%E5%BE%97%E7%84%A6%E7%82%B9%E5%B9%B6%E5%8D%95%E5%87%BB%E6%97%B6%E7%9A%84%E8%83%8C%E6%99%AF%E5%9B%BE%E7%89%87%20%2D%2D%3E-->  
  <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/pic_click"> 
<!--{cke_protected}{C}%3C!%2D%2D%20%E8%A7%A6%E6%91%B8%E6%A8%A1%E5%BC%8F%E4%B8%8B%E5%8D%95%E5%87%BB%E6%97%B6%E7%9A%84%E8%83%8C%E6%99%AF%E5%9B%BE%E7%89%87%2D%2D%3E-->  
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic_touch">  
<!--{cke_protected}{C}%3C!%2D%2D%E9%80%89%E4%B8%AD%E6%97%B6%E7%9A%84%E5%9B%BE%E7%89%87%E8%83%8C%E6%99%AF%2D%2D%3E-->  
  <item android:state_selected="true" android:drawable="@drawable/pic_select">   
<!--{cke_protected}{C}%3C!%2D%2D%E8%8E%B7%E5%BE%97%E7%84%A6%E7%82%B9%E6%97%B6%E7%9A%84%E5%9B%BE%E7%89%87%E8%83%8C%E6%99%AF%2D%2D%3E-->  
  <item android:state_focused="true" android:drawable="@drawable/pic_getfocus">   
</item></item></item></item></item></item></selector></code>

2、LayerDrawable(layer-list xml文件)

LayerDrawable与StateListDrawable类似,也可以包含一个Drawable数组,系统将会按这些Drawable对象的数组顺序来绘制,索引最大的Drawable将会被绘制在最上面。

2.1、LayerDrawable对象的xml文件结构

其根节点是layer-list,也可以包含多个item元素:

android:drawable:指定要包含的Drawable对象 android:id:Drawable的Id adnroid:buttom | top | left | button:用于指定一个长度值,指定该Drawable对象绘制到目标组件的指定位置。

2.2、在xml中实现LayerDrawable

<code class=" hljs xml"><!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--{cke_protected}{C}%3C!%2D%2D%E6%9C%80%E5%BA%95%E5%B1%82%2D%2D%3E-->
    <item>
        <bitmap android:src="@mipmap/ic_blue_launcher" android:gravity="center">
    </bitmap></item>
    <!--{cke_protected}{C}%3C!%2D%2D%E6%AC%A1%E4%B8%8A%E5%B1%82%2D%2D%3E-->
    <item android:top="10dp" android:left="10dp">
        <bitmap android:src="@mipmap/ic_red_launcher" android:gravity="center">
    </bitmap></item>
    <!--{cke_protected}{C}%3C!%2D%2D%E6%98%BE%E7%A4%BA%E5%9C%A8%E6%9C%80%E4%B8%8A%E9%9D%A2%2D%2D%3E-->
    <item android:top="20dp" android:left="20dp">
        <bitmap android:src="@mipmap/ic_green_launcher" android:gravity="center">
    </bitmap></item>
</layer-list></code>

2.3、在Java代码中动态生成并使用

Resources resources = getResources();   
Drawable[] layers = new Drawable[3];   
layers[0] = r.getDrawable(R.drawable.ic_blue_launcher);   
layers[1] = r.getDrawable(R.drawable.ic_red_launcher);  
layers[2] = r.getDrawable(R.drawable.ic_green_launcher); 
LayerDrawable layerDrawable = new LayerDrawable(layers)  
((ImageView) findViewById(R.id.imageview)).setImageDrawable(layerDrawable); 

/*在java代码中引用: */
((ImageView) findViewById(R.id.imageview)).setImageDrawable(getResources().getDrawable(R.drawable.layer_bcg) 

2.4、在xml中使用layer-list



    

这里写图片描述

2.5、利用LayerDrawable实现图片简单合成

在Android平台中Bitmap的叠加处理可以通过Canvas逐层绘画就可以了,而Drawable的叠加呢? 除了使用BitmapDrawable的getBitmap方法将Drawable转换为Bitmap外,还有另一个方案——LayerD

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 8.1.1 Android中的13种Drawable小结 Part 1
  • 8.1.2 Android中的13种Drawable小结 Part 2
  • 8.1.3 Android中的13种Drawable小结 Part 3
  • Android--字符串和Drawable之间互相转化,android--drawable
  • Android入门——Drawable与对应的资源xml的应用
  • Android Drawable的9种子类 介绍
  • Android Drawable的9种子类 介绍

相关文章

  • 2017-05-26Android一些不太常用XML文件属性的总结
  • 2017-05-26android源码解析之(三)--)HandlerThread
  • 2017-05-26滑动关闭activity,滑动activity
  • 2017-05-26Android项目从Eclipse增加支持Android Studio
  • 2017-05-26Stack Overflow 排错翻译,stackoverflow
  • 2017-05-26硅谷商城第二版6--购物车模块,6--购物车
  • 2017-05-26Android--控件属性汇总
  • 2017-05-26关于百度地图导航AndroidSDK的初始化问题,androidsdk初始化
  • 2017-05-26友盟的多渠道打包,友盟打包
  • 2017-05-26arcgis andriod 加载影像,arcgisandriod

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • [Android]动态加载/热部署框架汇总,android框架
    • Android 搜索 把软键盘上的回车键改为搜索
    • Android学习笔记-ImageView(图像视图),android-imageview
    • Android编译错误——undefined reference to,androidundefined
    • 谈谈Android中的Divider,AndroidDivider
    • 带新手走进神秘的HTTP协议,新手走进协议
    • JSON解析,json在线解析
    • Android Studio多渠道打包
    • ListView 添加 HeaderView常见错误,listviewheaderview
    • TCP的三次握手,TCP三次握手

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有