Android基本动画小结

Android提供了两类动画,第一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。第二类就是 Frame动画,即顺序的播放事先做好的图像。

1. Tween动画

主要类:

Animation           动画

AlphaAnimation    渐变透明度

RotateAnimation   画面旋转

ScaleAnimation     渐变尺寸缩放

TranslateAnimation 位置移动

AnimationSet          动画集,让多个动画同时生效。

AnimationUtils        工具类,通过该类来加载xml实现的动画。

(1) AlphaAnimation

代码方式:

Animation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);  // 从0.1f变化到1.0f
View.startAnimation(alphaAnimation );

xml实现: alpha_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="0.1"
        android:toAlpha="1.0"
        android:duration="2000"
    />
</set> 

alphaAnimation= AnimationUtils.loadAnimation(getContext(), R.anim.alpha_anim);

(2) RotateAnimation

代码实现:

Animation rotateAnimation = new RotateAnimation(0f, 360f);  // 0是动画起始时的角度,360f位动画结束时的角度
rotateAnimation.setDuration(1000);
this.startAnimation(scaleAnimation);

xml实现: rotate_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"         <!--为动画相对于物件的X、Y坐标的开始位置, 50%表示物件的中点位置 -->
        android:pivotY="50%"
        android:duration="500"
    />
</set> 

rotateAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.rotate_anim);

(3) ScaleAnimation

代码实现:

//初始化
Animation scaleAnimation = new ScaleAnimation(0.1f, 1.0f,0.1f,1.0f);  // 前面两个参数表示动画起始、结束时X方向的伸缩尺寸,后面两个参数表示动画起始、结束时Y方向的伸缩尺寸。
//设置动画时间
scaleAnimation.setDuration(500);
this.startAnimation(scaleAnimation);  

xml实现: scanle_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="0.0"
        android:toXScale="1.0"
        android:fromYScale="0.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="500"
    />
</set> 

scaleAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.scanle_anim);

(4) TranslateAnimation

代码实现:

Animation translateAnimation = new TranslateAnimation(0.1f, 100.0f,0.1f,100.0f);   // 四个参数(x1, x2, y1, y2),表示X方向从x1移动到x2, Y方向从y1移到y2.
 translateAnimation.setDuration(1000);     //设置动画时间
this.startAnimation(translateAnimation);  

xml实现: translate_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="10"
        android:toXDelta="100"
        android:fromYDelta="10"
        android:toYDelta="100"
    />
</set> 

translateAnimation= AnimationUtils.loadAnimation(getContext(), R.anim.translate_anim);

(5) 使用AnimationSet, 让多个动画同时生效,如:

//初始化 Translate动画
translateAnimation = new TranslateAnimation(0.1f, 100.0f,0.1f,100.0f);
//初始化 Alpha动画
alphaAnimation = new AlphaAnimation(0.1f, 1.0f);  

//动画集
AnimationSet set = new AnimationSet(true);
set.addAnimation(translateAnimation);
set.addAnimation(alphaAnimation);  

//设置动画时间 (作用到每个动画)
set.setDuration(1000);
this.startAnimation(set);  

2. Frame动画(FrameAnimaiton)

代码实现过程:

首先创建一个AnimationDrawable对象,通过addFrame方法把每一帧要显示的内容添加进去,最后通过Start方法来播放动画。

frameAnimation = new AnimationDrawable();
for (int i = 0; i < 10; i++) {
    int id = getResources().getIdentifier("load" + (i+1), "drawable", this.getContext().getPackageName());
     frameAnimation.addFrame(getResources().getDrawable(id), 100);
}
//设置循环播放   false表示循环  true表示不循环,仅播放一次
frameAnimation.setOneShot(false); 

//应用动画
image.setBackgroundDrawable(anim);
anim.start(); 

xml实现方式: frame_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<animaltion-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/load1" android:duration="50" />
    <item android:drawable="@drawable/load2" android:duration="50" />
    <item android:drawable="@drawable/load3" android:duration="50" />
    <item android:drawable="@drawable/load4" android:duration="50" />
    <item android:drawable="@drawable/load5" android:duration="50" />
    <item android:drawable="@drawable/load6" android:duration="50" />
    <item android:drawable="@drawable/load7" android:duration="50" />
    <item android:drawable="@drawable/load8" android:duration="50" />
    <item android:drawable="@drawable/load9" android:duration="50" />
    <item android:drawable="@drawable/load10" android:duration="50" />
</animaltion-list>  

应用frame_anim.xml:

image.setBackgroundResource(R.anim.frame);  //将动画资源文件设置为ImageView的背景
AnimationDrawable anim = (AnimationDrawable) image.getBackground(); //获取ImageView背景,此时已被编译成AnimationDrawable
anim.start();   //开始动画 

3. 与动画相关的一些函数及参数说明


表一

属性[类型] 功能  
Duration[long] 属性为动画持续时间 时间以毫秒为单位
fillAfter [boolean] 当设置为true ,该动画转化在动画结束后被应用
fillBefore[boolean] 当设置为true ,该动画转化在动画开始前被应用

interpolator

指定一个动画的插入器 有一些常见的插入器
accelerate_decelerate_interpolator
加速-减速 动画插入器
accelerate_interpolator
加速-动画插入器
decelerate_interpolator
减速- 动画插入器
其他的属于特定的动画效果
repeatCount[int] 动画的重复次数  
RepeatMode[int] 定义重复的行为 1:重新开始  2:plays backward
startOffset[long] 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
zAdjustment[int] 定义动画的Z Order的改变 0:保持Z Order不变
1:保持在最上层
-1:保持在最下层
时间: 2024-10-10 10:48:09

Android基本动画小结的相关文章

android属性动画小结

一直以来都没有用属性动画,认为可以靠postDelayed()一个任务来不断invalidate这个view从而实现动画效果. 但是今天发现使用属性动画会更流畅 public void rotateyAnimRun(final View view) { ObjectAnimator anim = ObjectAnimator// .ofFloat(view, "zhy", 1.0F,  0.0F)// .setDuration(500);// anim.start(); anim.ad

79.Android之动画基础

转载:http://a.codekk.com/detail/Android/lightSky/%E5%85%AC%E5%85%B1%E6%8A%80%E6%9C%AF%E7%82%B9%E4%B9%8B%20Android%20%E5%8A%A8%E7%94%BB%E5%9F%BA%E7%A1%80 一 传统 View 动画(Tween/Frame) 1.1 Tween 动画 主要有 4 中:缩放.平移.渐变.旋转 文件位置: res/anim/filename.xml编译资源的数据类型:an

【转】android 属性动画之 ObjectAnimator

原文网址:http://blog.csdn.net/feiduclear_up/article/details/39255083 前面一篇博客讲解了 android 简单动画之 animtion,这里来讲解一下android 3.0之后添加的一些动画   animator 中的 ObjectAnimator . 属性动画概念: 所谓属性动画:改变一切能改变的对象的属性值,不同于补间动画:只能改变 alpha,scale,rotate,translate.听着有点抽象,举例子说明 补间动画能实现的

Android属性动画之ObjectAnimator

相信对于Android初学者,对于Android中的动画效果一定很感兴趣,今天为大家总结一下刚刚学到的属性动画案例. 首先和一般的Android应用一样,我们先建一个工程,为了方便,我们的布局文件中就只添加一个ImageView和button按钮,代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.andr

Android适配方案小结(三)

在Android适配方案小结(一).(二)中,我们了解了一些基本概念. 那么在具体开发中,我们应该注意什么呢. 首先,我们必须要知道,其实适配的关键在于两点: (1)不同分辨率设备的适配,这点在单位的使用上用dp.sp以及图片资源存放于不同的drawable文件夹就可以解决问题: (2)不同尺寸的适配,这点主要靠将相关值以及布局文件放置于不同的文件夹中来解决. 2.1 values文件夹 可以在工程下创建不同的values文件夹:values-sw480dp, values-sw600dp, v

android 属性动画之 ObjectAnimator

前面一篇博客讲解了 android 简单动画之 animtion,这里来讲解一下android 3.0之后添加的一些动画   animator 中的 ObjectAnimator . 1.alpha //第一个参数为 view对象,第二个参数为 动画改变的类型,第三,第四个参数依次是开始透明度和结束透明度. ObjectAnimator alpha = ObjectAnimator.ofFloat(text, "alpha", 0f, 1f); alpha.setDuration(20

Android Tween动画

View Animation, 即显示在view上的Tween Animation Tween动画,本质上不改变View对象本身,只改变它的绘制方式 两种实现方式,一种在xml中定义,一种直接在代码里定义 xml定义方式: 位移动画translate <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk

android开机动画启动流程

从android的Surface Flinger服务启动分析知道,开机动画是在SurfaceFlinger实例通过调用startBootAnim()启动的. 下面我们就一起学习BootAnim是如何启动和结束的,我精读代码前都喜欢先描出框架图,以此图为基础再去研读会达到事半功倍的效果.好吧,直接上图. 内核起来后会启动第一个进程,即init进程. init进程会根据init.rc配置启动surfaceflinger进程. service surfaceflinger /system/bin/su

[转]android logo:内核、android开机动画

平台信息:内核:linux2.6/linux3.0系统:android/android平台:S5PV310(samsungexynos4210/4412) 作者:xubin341719(欢迎转载,请注明作者) android开logo,这一块在工作改动的也是比较多的,也比较简单,不同的公司,不同型号的产品,开机的标识不一样. 我们平时目测的开机logo一般是两种:静态的和动画的.其实在实现logo的过程中,有四幅图片:(1).uboot显示:(2).kernel显示logo_linux_clut