使用(Drawable)资源———AnimationDrawable资源
AnimationDrawable代表一个动画。
下面以补间动画为例来介绍如何定义AnimationDrawable资源,定义补间动画的XML资源文件已<set.../>元素作为根元素,该元素可以指定如下4个元素:
- alpha:设置透明度的改变。
- scale:设置图片进行缩放改变。
- translate:设置图片进行位移变换。
- roate:设置图片进行旋转。
定义动画的XML资源应该放在/res/anmi/路径下,当使用ADT创建一个Android应用时默认不会包含该路径,开发者需要自行创建该路径。
定义补间动画的思路很简单:设置一张图片的开始状态(包括透明度、位置、缩放比、旋转度)、并设置该图片的结束状态(包括透明度、位置、缩放比、旋转度),再设置动画的持续时间,Android系统会使用动画效果把这张图片从开始状态变换到结束状态。
设置补间动画的语法格式如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@[package:]anim/interpolator_resource"
android:shareInterpolator=["true"|"false"]
android:duration="持续时间">
<alpha android:fromAlpha="float"
android:toAlpha="float"/>
<!-- 定义缩放变换 -->
<scale android:fromXScale="flaot"
android:toXScale="flaot"
android:fromYScale="flaot"
android:toYScale="flaot"
android:pivotX="flaot"
android:pivotY="flaot"
/>
<!-- 定义为移变换 -->
<translate android:fromXDelta="flaot"
android:toXDelta="flaot"
android:fromYDelta="flaot"
android:toYDelta="flaot"
/>
<rotate android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float"/> </set>
上面的语法格式中包含了大量的fromXxx、toXxx属性,这些属性就用于定义图片的开始状态、结束状态。除此之外,当进行缩放变换(scale)、旋转(roate)变换时,还需要指定如下pivotX、pivotY两个属性,这两个属性用于指定变换的“中心点”——比如进行旋转变换时,需要指定“旋轴点”;进行缩放变换时需要指定“中心点”。
除此之外,上面<set.../>、<alpha.../>、<scale.../>、<translate.../>、<rotate.../>都可指定一个android:interpolator属性,该属性指定动画的变化速度,可实现匀速、正加速、负加速、无规则变加速等,Android系统的R.anim类中包含了大致常量,它们定义了不同的动画速度,例如:
- linear_interpolator:匀速变换。
- accelerate_interpolator:加速变换。
- decelerate_interpolator:减速变换。
如果程序想让<set.../>元素下所有的变换效果使用相同的动画加速,则可指定android:shareInterpolator="true"。
例如下面的资源文件定义了一个动画资源。
程序清单文件:\res\anim\my_anim.xml文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true"
android:duration="5000">
<!-- 定义缩放变换 -->
<scale android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:duration="2000"/>
<!-- 定义为移变换 -->
<translate android:fromXDelta="10"
android:toXDelta="130"
android:fromYDelta="30"
android:toYDelta="-80"
android:duration="2000"/>
</set>
上面的动画资源文件十分简单,它只指定了图片资源需要进行两种变换:缩放变化和位移变换。
一旦定义了上面的动画资源文件,接下来就可以在XML文件中按如下语法格式来访问它。
@[<package>.]R.anim.<file_name>
为了在Java代码中获取实际的Animation对象,则可调用AnimationUtils的如下方法:
- loadAnimation(Context ctx,int resId)
下面的程序示范了如何使用AnimationDrawable资源。
界面布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<ImageView android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/java"
/>
<Button android:id="@+id/bn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始动画"/> </LinearLayout>
后台代码文件如下:
package com.example.studyresources; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView; public class AnimationDrawableTest extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animation_drawable_test);
final ImageView image=(ImageView)findViewById(R.id.image);
//加载动画资源
final Animation anim=AnimationUtils.loadAnimation(this,R.anim.my_anim);
//设置动画结束后,保留结束状态
anim.setFillAfter(true);//①
Button bn=(Button)findViewById(R.id.bn);
bn.setOnClickListener(new OnClickListener(){ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
//开始动画
image.startAnimation(anim);
}});
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.animation_drawable_test, menu);
return true;
} }
上面的程序使用了界面布局中的两个组件:一个ImageView、一个Button,这是两个最普通的组件。运行上面的程序,将看到如图6.7所示的动画效果。

上面的程序中①号代码设置动画结束后保留图片的变换结果。本来Android的API文档中说明可以在<alpha.../>、<scale.../>、<translate.../>、<rotate.../>等元素中指定android:fillAfter为true来实现这个效果,但实际上要为<set.../>设置android:fillAfter为true才可以。
使用(Drawable)资源———AnimationDrawable资源的更多相关文章
- android学习笔记35——AnimationDrawable资源
AnimationDrawable资源 AnimationDrawable,代表一个动画. android既支持传统的逐帧动画(类似于电影方式,一张图片一张图片的切换),也支持通过平移.变换计算出来的 ...
- AnimationDrawable 资源
AnimationDrawable代表一个动画,Android 既支持传统的逐帧动画(类 似于电影方式,一张图片.一张图片地切换),也支持通过平移.变换计算出来的补间动画. 下面以补间动画为例来介绍如 ...
- [C++] 将 mp3 等音乐资源以资源形式嵌入 exe 文件中
引用:http://www.easyx.cn/skills/View.aspx?id=6 本文讲解怎样将 mp3 等音乐资源以资源形式嵌入 exe 文件中,并通过 mciSendString 调用.嵌 ...
- 将 mp3 等音乐资源以资源形式嵌入 exe 文件中
引用:http://www.easyx.cn/skills/View.aspx?id=6 本文讲解怎样将 mp3 等音乐资源以资源形式嵌入 exe 文件中,并通过 mciSendString 调用.嵌 ...
- Spring MVC配置静态资源和资源包
Spring MVC配置静态资源和资源包 本例映射:css目录: pom.xml <properties> <spring.version>4.3.5.RELEASE</ ...
- 十九、dbms_resource_manager(用于维护资源计划,资源使用组和资源计划指令)
1.概述 作用:用于维护资源计划,资源使用组和资源计划指令;包dbms_resource_manager_privs用于维护与资源管理相关的权限. 2.包的组成 1).dbms_resource_ma ...
- java线程共享受限资源 解决资源竞争 thinking in java4 21.3
java线程共享受限资源 解决资源竞争 具体介绍请參阅:thinking in java4 21.3 thinking in java 4免费下载:http://download.csdn.net/ ...
- 3、flink架构,资源和资源组
一.flink架构 1.1.集群模型和角色 如上图所示:当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager.由 Client 提交任务给 JobMa ...
- 使用(Drawable)资源———ShapeDrawable资源
ShapeDrawable用于定义一个基本的几何图形(如矩形.圆形.线条等),定义ShapeDrawable的XML文件的根元素是<shape.../>元素,该元素可指定如下属性. and ...
随机推荐
- 转 Goldengate常用命令
1.Goldengate的起停 启动goldengate a> 启动goldengate时最好先从target节点开始,然后是source节点.否则data pump进程可能会由于没有收到t ...
- Ubuntu系统如何卸载并安装新版本的jdk(permission denied问题)
1.如果是自带的openjdk运行下面可以删除: sudo apt-get purge openjdk* 但是这种情况又不一定成功,有时候运行java -version发现还是可以运行的.证明删除不成 ...
- HDU 5171 GTY's birthday gift 矩阵快速幂
GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- Android源码之Gallery专题研究(1)
前言 时光飞逝,从事Android系统开发已经两年了,总想写点什么来安慰自己.思考了很久总是无法下笔,觉得没什么好写的.现在终于决定写一些符合大多数人需求的东西,想必使用过Android手机的人们一定 ...
- office加载项部署清单签名的证书或其位置不受信任
异常信息: System.Security.SecurityException: 此应用程序中的自定义功能将不起作用,原因是用于为 BIMT写作指导 的部署清单签名的证书或其位置不受信任.请向管理员寻 ...
- jvm内存设置及总结
http://dmouse.iteye.com/blog/1264118 jvm内存设置及总结 博客分类: java相关 Application情况: 大量使用了内存缓存,应用负载量较大,900w/d ...
- Python之路【第三篇】:模块
定义: 包:包含__init__.py文件.模块(也是.py文件) 当包被其它模块调用时,首先会执行该包下的__init__文件 包含有模块,包可以有多级 模块的导入: import from...i ...
- Codeforces AIM Tech Round3
打得最烂一场Codeforces,多次都错题,无限WA... A题: 题意:给定n个橘子的大小,大小超过b的丢掉,不足d的补充进来,同时超过d的部分去掉,问要去掉几次 分析:直接模拟即可 #inclu ...
- awk命令详解二
awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: ...
- AppServ设置虚拟主机 及域名连接
1: 安装好AppServ2.5.9软件,官网是:http://www.appservnetwork.com/ ,2.59下载地址是:http://nchc.dl.sourceforge.net/so ...