安卓动画(Animation)总结

首先,说一下,已经一个多月没写博客了,并没有偷懒,而是总觉得时间不够用,今天仔细想想,写一篇博客的时间还是可以挤出来的,只是自己没有安排好时间而已,毕竟这也算是对学过知识的一种总结,应该坚持,所以从今天开始,我又要继续了,对自己说一声,加油!

今天对Animation的学习做一个总结:

一直觉得动画很炫酷,学了动画之后才知道原来是这么回事!

安卓Animation分为两种:

(1)帧动画  Frame Animation :一张图片就是一帧,很多帧的不停切换便构成了动画

(2)补间动画   Tween Animation :对一张图片就行旋转(Rotate)、平移(Translate)、缩放(Scale)、透明度(Alpha)改变产生的动画效果

一、先是在 xml中设置动画资源,再在MainActivity中加载并开始动画

帧动画的实现:

1.在res资源文件下创建动画资源文件夹 anim,添加frame_anim.xml布局文件

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="false">

<item  android:drawable="@drawable/img001"></item>

<item  android:drawable="@drawable/img002"></item>

<item  android:drawable="@drawable/img003"></item>

<item  android:drawable="@drawable/img004"></item>

<item  android:drawable="@drawable/img006"></item>

</animation-list>

2.在要显示的内容面板上设置背景为动画资源

<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:id="@+id/content"

android:orientation="vertical"

android:background="@anim/frame_anim"               //这里设置

tools:context="${relativePackage}.${activityClass}" >

</LinearLayout>

3.在MainActivity中设置当点击显示面板时开始动画

LinearLayout content=(LinearLayout)findViewById(R.id.content);

AnimationDrawable animation=(AnimationDrawable)content.getBackground();             //事件监听器里面写

animation.start();

补间动画的实现:

1.在anim动画资源文件夹中添加xml布局文件

旋转:

<rotate

android:interpolator="@android:anim/accelerate_decelerate_interpolator"                            //动画执行期间的变化速度,控制变换方式

android:fromDegrees="0"                      //起始角度

android:toDegrees="270"                      //结束角度

android:pivotX="0.5"

android:pivotY="0.5"                              //旋转中心   0.5,0.5表示旋转中心在图片的中心

android:duration="3000"                        //动画持续时间

xmlns:android="http://schemas.android.com/apk/res/android">

</rotate>

平移:

<translate

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:fromXDelta="0"

android:fromYDelta="0"

android:toXDelta="500"

android:toYDelta="500"

android:duration="3000"

xmlns:android="http://schemas.android.com/apk/res/android">

</translate>

缩放:

<scale

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:fromXScale="0"

android:toXScale="1"

android:fromYScale="0"

android:toYScale="1"

android:duration="3000"

xmlns:android="http://schemas.android.com/apk/res/android">

</scale>

透明度:

<alpha

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:fromAlpha="0"

android:toAlpha="1"

android:duration="3000"

xmlns:android="http://schemas.android.com/apk/res/android">

</alpha>

2.在MainActivity中加载动画资源并开始动画

Animation rotate_anim=AnimationUtils.loadAnimation(getApplicationContext(),R.anim.rotate_anim);                                 //加载旋转动画

让某一图片实现这个动画效果

image.startAnimation(rotate_anim);

二、在MainActivity中添加动画资源并开始动画

补间动画的实现:

AlphaAnimation alpha_anim=new AlaphaAnimation(float fromDegree,float toDegree );

设置属性:

alpha_anim.setDuration(  1000);        //持续时间

alpha.setFillAfter  (boolean b)  ;          //动画结束后是否留在当前位置

alpha.setFillBefore(boolean b);          //动画结束后是否回到起始位置

开始动画

image.startAnimation(alpha_anim);

alpha_anim.setStartOffset();              //设置动画开始前的时间

alpha_anim.setRepeatCount();          //重复次数

alpha_anim.setInterpolator();             //渐变方式

三、AnimationSet的使用

使用AnimationSet可以将几个动画组合成一个动画,

AnimationSet  animationSet=new AnimationSet(true);

animationSet.addAnimation(alpha_anim);

animationSet.addAnimation(rotate_znim);                       //这样将透明度动画和旋转动画组合成一个动画

四、LayoutAnimationController的使用

LayoutAnimationController的作用就是可以是某一个Layout布局中的组件按照你所设定的动画的形式显示出来,其中所有的组件显示方式都是相同的

例如现在有一个ListView :那么如何让ListView的每一行逐行显示出来

1.设置显示方式动画:

ScaleAnimation scale_anim=new ScaleAnimation(0,1,0,1);

scale_anim.setDuration(1000);

2.设置LayoutAnimationController

LayoutAnimationController    lacon=new LayoutAnimationController(scale_anim,0.5f);  0.5f指的是上一行和写一行显示的时间间隔;

为lacon设置属性: lacon.setOrder();   设置显示的方向

3.将ListView和动画关联

ListView.setLayoutAnimation(lacon);

五、如何自定义一个Animation

1.创建一个类继承Animation,并重写其中的applyTransformation()方法

public class ZidingyiAnimation extends Animation {

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

// TODO Auto-generated method stub

t.getMatrix().setTranslate(200*interpolatedTime, 200*interpolatedTime);

super.applyTransformation(interpolatedTime, t);

}

}

这里面通过矩阵变换来实现我们的动画,其中interpolatedTime是一个从0-1自增的数,即0,0.0000000......1,0.0000000000002一直到1

2.在MainActivity中获得我们定义的动画,并为其设置属性:

ZidingyiAnimation my_anim=new ZidingyiAnimation();

my_anim.setDuration(1000);

3.将动画和我们的图片关联

image.startAnimation(my_anim);

六、AnimationListener的使用

例如我们上面自定义的my_anim动画,我们可以为其设置动画监听事件

my_anim.setAnimationListener(new AnimationListener() {

@Override

public void onAnimationStart(Animation animation) {

// TODO Auto-generated method stub

}

@Override

public void onAnimationRepeat(Animation animation) {

// TODO Auto-generated method stub

}

@Override

public void onAnimationEnd(Animation animation) {

// TODO Auto-generated method stub

Toast.makeText(MainActivity.this, "结束,", Toast.LENGTH_SHORT).show();

}

});

在上面的每个方法里可以写我们的处理事件!

到此为止Animation的内容我所了解的就这么多了,以后学习中肯定还会遇到很多关于Animation的知识,再慢慢积累吧!



时间: 2024-10-19 18:40:37

安卓动画(Animation)总结的相关文章

css3 动画(animation)-简单入门

css3之动画(animation) css3中我们可以使用动画,由于取代以前的gif图片,flash动画,以及部分javascript代码(相信有很多同学都用过jquery中的animate方法来做一些动画).具体如何使用呢??? 首先定义一个动画,然后引用动画. 定义一个动画要使用@keyframes,然后跟上你要定义的动画的名字.关键字"from"表示开始, "to"表示结束,等同于0% 和 100%.最好使用百分比来表示变化发生的时间,这样的话还可以定义从开

《The CG Tutorial》阅读笔记——动画 Animation

这段时间阅读了英文版的NVidia官方的<The CG Tutorial>,通过它来学习基本的图形学知识和着色器编程. 在此做一个阅读记录. 动画 Animation 一.基于时间的运动 Movement in Time 实现动画渲染,需要应用程序对时间进行监测,并将它作为一个全局变量传递给着色器. 尽量在GPU上使用顶点着色器执行动画计算是一种高效的动画实现方式,它能够释放CPU,让CPU处理更多的复杂计算,比如碰撞检测,人工智能与游戏玩法. 二.一个做脉冲运动的对象 A Pulsating

动画animation的三个应用(漂浮的白云、旋转的星球、正方体合成)

× 目录 [1]漂浮的白云 [2]旋转的星球 [3]正方体合成 前面的话 前面介绍过动画animation的详细用法,本文主要介绍动画animation的三个效果 漂浮的白云 [效果演示] [简要介绍] 漂浮的白云主要通过远景白云和近景白云来实现立体漂浮效果.远景和近景分别使用两张背景图片,通过改变其背景定位来实现白云移动效果,通过设置不同的动画持续时间来实现交错漂浮的效果 [主要代码] .box{ position: relative; height: 300px; width: 500px;

使用CSS3动画 animation 来控制元素的显示和隐藏

CSS3中 animation 和 transition 俩样式都能创建动画效果,而且是后台C++执行的,所以效率比普通jQuery的js模拟动画的效率高很多,所以建议大家能用css实现的效果都用css. transition的使用比较简单,这里就不介绍了,着重为大家介绍下 animation . animation 的css属性有很多,本文通过 animation-name 来控制启动动画和转换动画,以下是一个通过 animation 来控制元素的显示和隐藏的例子(仅支持webkit): <!

CSS3的变形transform、过渡transition、动画animation学习

学习CSS3动画animation得先了解一些关于变形transform.过渡transition的知识 这些新属性大多在新版浏览器得到了支持,有些需要添加浏览器前缀(-webkit-.-moz-.-ms-.-o-),本文为简化内容,直接使用了原版属性 根据不同属性的支持度,在实际使用的时候需要添加相应的浏览器前缀支持 目录: 变形transform 过渡transition 动画animation 一.变形transform 变形有rotate旋转.scale缩放.translate位移.sk

css3动画-animation

animation驱使一组css style变化到另外一组css style,它可以定义keyframes的集合,指定style的开始和结束状态,它是transition的增强. 配置animation animation-delay:从加载到开始执行的延迟 animation-direction:normal|reverse|alternate|alternate-reverse   参考 normal:往前执行,完成后又回到原点 reverse:和定义的方向相反,完成后回到原点开始执行 al

Android 动画animation 深入分析

转载请注明出处:http://blog.csdn.net/farmer_cc/article/details/18259117 Android 动画animation 深入分析 前言:本文试图通过分析动画流程,来理解android动画系统的设计与实现,学习动画的基本原则,最终希望能够指导动画的设计. 0 本文中用到的一些类图 1 view animation 调用方法:view.startAnimation(animation); [java] view plaincopy public voi

Android动画Animation的两种加载执行方式

本文以简单的AlphaAnimation("淡入淡出(透明度改变)"动画)为例,简单的说明Android动画Animation的两种加载执行方法: (1) 直接写Java代码,制作Android动画. (2) 写XML配置文件,加载XML资源文件执行. 其实这两者是一致的.要知道,在Android中,凡是可以在XML文件完成的View,代码亦可完全写出来. 现在先给出一个Java代码完成的动画AlphaAnimation,AlphaAnimation功能简单,简言之,可以让一个View

cocos2dx动画Animation介绍

 一.帧动画 你能够通过一系列图片文件,像例如以下这样,创建一个动画: [cpp] CCAnimation *animation = CCAnimation::create(); //从本地文件系统中载入图片文件到CCSpriteFrame中区,然后加入到CCAnimation中 for (int i = 1; i < 15; i++) { char szImageFileName[128] = {0}; sprintf(szImageFileName, "Images/grossin