Drawable类及XMLDrawable的使用
一.性质
可直接使用.png、.jpg、.gif、9.png等图片作为资源,也可使用多种XML文件作为资源。(就是这些资源都能生成Drawable对象)。并对XML文件作出相关处理
二.XMLDrawable
1.StateListDrawable
作用:StateListDrawable对象所显示的Drawable对象会随着目标组件状态的改变而改变
组成:
根元素<selector/>,子元素<item/>
子元素<item/>的属性:android:color或android:drawable
android:state_xxx:状态
举例:
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="false"
- android:drawable="@mipmap/start"/>
- <item android:state_pressed="true"
- android:drawable="@mipmap/start_down"/>
- </selector>
相关目标组件的状态不列出来
2.LayerDrawable
作用:可包含一个Drawable数组,系统会按照Drawable对象的数组顺序绘制,索引越大越被绘制在上层
根元素:<layer-list> 子元素:<item/>
子元素的属性:android:drawable 作为LayerDrawable的Drawable对象
android:id 为Drawable对象指定标识符
android:buttom|top...等 指定Drawable的绘制位置
实例1:
- <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <!--调用android自带的id修改,利用@android:id 修改父style的background-->
- <item android:drawable="@mipmap/p_1"
- android:id="@android:id/background"/>
- <item android:drawable="@mipmap/p_2"
- android:id="@android:id/progress"/>
- </layer-list>
实例2:
- <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <!--可以在item里面创建各种各样的XMLDrawable-->
- <item>
- <bitmap android:src="@mipmap/p_3"
- android:gravity="center"/>
- </item>
- <item>
- <bitmap android:src="@mipmap/p_4"
- android:gravity="center"/>
- </item>
- </layer-list>
3.ShapeDrawable
作用:设置一个基本的几何图形(矩形、圆形、线条灯)
根元素:<shape/> 根元素的属性:android:shape=["rectangle"|"oval"|"line"|"ring"]
子元素:<corners/>:设置整体或者四个边角的弧度
<gradient/>:渐变(可选择渐变的角度但必须是45的倍数,默认为0,渐变的中心点,渐变的类型,渐变的半径和开始和终止的颜色)
<padding/>:内边距 (可以控制四周的边距)
<size/>:形状的大小 (设置形状的宽高)
<solid/>:单种颜色填充
<stroke/>:绘制边框 (可设置画笔的颜色和粗细 并 设置每画一条线的长度和间距且必须两者都设置才有效)
详情参照:http://blog.csdn.net/lonelyroamer/article/details/8254592
实例:
- <shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
- <corners android:radius="3dp"/>
- <padding android:left="7dp"
- android:right="7dp"
- android:bottom="7dp"
- android:top="7dp"/>
- <gradient android:angle="45"
- android:startColor="#0000"
- android:endColor="#ffff"/>
- </shape>
4.ClipDrawable
作用:从Drawable上截取一个“图片片段”
根元素:<clip> 不使用子元素。
根元素属性: android:drawable: 选定Drawable对象
android:clipOrientation:指定截取方向
android:gravity:从什么地方开始截取
总结:选定图片并选择方向与位置截取图片
使用:从java中获取ClipDrawable并用setLevel()改变截取大小 //setLevel()只能从0~10000
- <!--res/drawable/test_clip.xml-->
- <clip xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@mipmap/start"
- android:clipOrientation="horizontal"
- android:gravity="center">
- </clip>
- <!--res/layout/activity_main.xml-->
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- tools:context="com.chen.android.test.MainActivity">
- <ImageView
- android:id="@+id/imageView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/test_clip"/>
- </LinearLayout>
- /*实现图片渐渐展开的效果*/
- public class MainActivity extends AppCompatActivity {
- int data = 0;
- int what = 0X11;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ImageView img = (ImageView)findViewById(R.id.imageView);
- //ImageView.getDrawable()获取的是当前控件里的图片,返回的是Drawable类型,还有说明Drawable对象可随意变成子对象并调用子对象的方法
- final ClipDrawable clipDrawable = (ClipDrawable)img.getDrawable();
- //创建Handler等待计时器传送的信息,使图片扩展
- final Handler mHandler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- if (msg.what == what){
- clipDrawable.setLevel(data);//扩大截取的图片面积
- data += 200;
- }
- }
- };
- //创建计时器
- final Timer timer = new Timer();
- timer.schedule(new TimerTask() {
- @Override
- public void run() {
- if (data >= 10000){
- timer.cancel();
- }
- mHandler.obtainMessage(what).sendToTarget();
- }
- },0,300);
- }
- }
5.AnimationDrawable
简介:放在res/anim下,支持逐帧动画和补间动画
根元素:<set> 根元素属性:android:interpolator="参数"
参数:@android:anim/ 为开头 选择 linear_interpolator:匀速变换 | accelerate_interpolar:加速变换 | decelerate_interpolator:减速变换
android:shareInterpolator= "true|false" :是否让资源的interpolator与根元素相同
android:duration="时间":定义持续时间
子元素(同样可以设置duration):<alpha>:设置开始和结束的透明度
<scale>:设置缩放的中心、开始的X,Y的尺寸和结束时X,Y的尺寸
<translate>:设置图片的开始位置和结束位置进行位移
<rotate>:设置旋转的中心、开始的角度和结束时候的角度
注意:利用android:fillAfter="true|false":设置保留后的状态(哪个状态想保留就用这个,如果都像就放在<set>中)
使用:利用AnimationUtils的静态方法loadAninmation(Context context,int resId)
- <!--在res/anim/test_animtaion中-->
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/linear_interpolator"
- android:shareInterpolator="true"
- android:fillAfter="true">
- <alpha android:fromAlpha="50.0"
- android:toAlpha="100.0"
- />
- <scale android:pivotX="50%"
- android:pivotY="50%"
- android:fromXScale="1.0"
- android:fromYScale="1.0"
- android:toXScale="1.5"
- android:toYScale="1.5"
- android:duration="3000"
- />
- <translate android:fromXDelta="30"
- android:toXDelta="300"
- android:fromYDelta="40"
- android:toYDelta="90"
- android:duration="3000"/>
- </set>
- /*实现动画*/
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ImageView img = (ImageView)findViewById(R.id.imageView);
- /*利用工具类获取对象*/
- Animation animation= AnimationUtils.loadAnimation(this,R.anim.test_animation);
- /*将动画附加在图片上*/
- img.startAnimation(animation);
- }
- }
Drawable类及XMLDrawable的使用的更多相关文章
- Android 学习笔记多媒体技术之 Drawable类+Tween(补间动画)+Frame(帧动画)
学习内容: 1.了解Drawable类的作用 2.如何使用Drawable... 3.了解Tween动画... 4.如何创建和使用Tween动画... 1.Drawable类... Drawabl ...
- Android动画的深入分析
一.AnimationDrawable的使用 详见:Drawable类及XMLDrawable的使用 补充:通过Animation的setAnimationListener()可以给View动画添加监 ...
- Android样式的开发:drawable汇总篇
Android有很多种drawable类型,除了前几篇详细讲解的shape.selector.layer-list,还有上一篇提到的color.bitmap.clip.scale.inset.tran ...
- Android中的Drawable资源
在Android应用中,常常会用到Drawable资源,比如图片资源等,在Android开发中我们是用Drawable类来Drawable类型资源的. Drawable资源一般存储在应用程序目录的\r ...
- XML Drawable与9-Patches
可绘制对象资源 两种设计工具均属于drawable.Android把任何可绘制在屏幕上的图形图像都称为drawable drawable可以是一种抽象的图形.一个继承 Drawable 类的子类,或者 ...
- Android学习之Drawable(一)
Drawable有很多种,它们表示一种图像概念,但它们不全是图片.Drawable是什么呢?下面是Google Android API中的定义: A Drawable is a general abs ...
- Android Drawable绘图学习笔记(转)
如何获取 res 中的资源 数据包package:android.content.res 主要类:Resources Android SDK中的简介:Class for accessing an ap ...
- 系统的Drawable(一)
系统的Drawable(一) 学习自 <Android 开发艺术探索> <官方文档> https://www.cnblogs.com/popfisher/p/6238119.h ...
- Android 程序drawable资源保存到data目录
今天做了个小功能,就是把我们程序Drawable里面的图片保存到data目录下面,然后另外一个程序需要读取data目录里面保存的图片.涉及了data目录读写.这功能看上去挺简单,不过实际做的时候还是遇 ...
随机推荐
- js new Date()
1.Date 对象用于处理日期和时间.创建 Date 对象的语法:var myDate=new Date()Date 对象会自动把当前日期和时间保存为其初始值.2.参数形式有以下5种: new Dat ...
- [转]标准C++字符串string以及MFC6.0字符串CString的tokenize和split函数
标准字符串的方法: /******************************************** the tokenize function for std::string ****** ...
- Java 中级IO流基础及主要API编程
1. IO流基础知识,流 是字节从源到目的地的运行的轨迹,次序是有意义的, 字节会按照次序进行传递, 比如Hello World 在下图中的传递的轨迹.该图形象的解释了IO中流的概念.流中全是字节.2 ...
- 项目 Web 的 NuGet 程序包还原失败: 找不到“1.0.0”版本的程序包“Microsoft.Net.Compilers”。。 0
项目 Web 的 NuGet 程序包还原失败: 找不到“1.0.0”版本的程序包“Microsoft.Net.Compilers”.. 0 使用vs的NutGet包管理器时,另一台电脑从svn下载 ...
- 创建一个Hello World模块
这篇文章描述了怎样为Orchard建立一个非常小的模块,它只显示一个"Hello World"页面. 另一个模块[Module]的简单例子,你可以从这找到:Quick Start ...
- MVC4 Win2008 aspnet_isapi配置问题
win2008下配置共2步 1.先确保你的应该程序池选择了asp.net 4.0框架 2.添加脚本映射(解决URL不能重写) 3.添加通配符脚本映射(解决图片不能显示) IIS中的Web应用程序有两种 ...
- SQL Server 中可以被锁住的 12 种资源
第1种: DB 整个数据库 第2种: file 数据库文件 第3种: table 第4种: hobt(堆)BTree(B树) 第5种: extent 一个区(8个8KB页面) 第6种: page 数据 ...
- Azure上如何在Linux下挂载数据磁盘
[原文首次发表于51cto http://cloudapps.blog.51cto.com/3136598/1653672] 在Azure上创建了虚拟机之后,我们在一些情况下会需要添加更多的数据磁盘来 ...
- Git 介绍
一,理解 Git 1,分布式版本控制 Git 版本控制系统的设计思想是"去中心化".传统的 CVS .SVN 等工具采用的是 C/S 架构,只有一个中心代码仓库,位于服务器端.而一 ...
- 一步一步学python(六) - 抽象
1.string转数字 import locale locale . atoi( str ) 2.创建函数 函数是可以调用(可能包含参数),执行某种行为并返回一个值 >>>impo ...