码迷,mamicode.com
首页 > 移动开发 > 详细

Android基本动画小结

时间:2015-04-25 16:38:53      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

    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:保持在最下层

Android基本动画小结

标签:

原文地址:http://www.cnblogs.com/Jackwen/p/4456010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!