android 帧Frame和补间Tween动画

android的动画总共有两种方式:

(一)帧(Frame)动画

就是多张图片,控制好播放顺序,持续时间,从头到尾的播放,看起来就像是电视电影的画面。

实现方式:

1.新建一个AnimationDrawable对象,把这些图片加载进去。 addFrame第一参数表示要加载的内容,第二参数表示持续时间。

     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);  

        } 

2.第二种构造AnimationDrawable

ivAnimView = (ImageView) findViewById(R.id.ivAnimView);

  ivAnimView.setBackgroundResource(R.anim.frame_animation);
  Object backgroundObject = ivAnimView.getBackground();
  animationDrawable = (AnimationDrawable) backgroundObject;

 

运行一次动画:

    animationDrawable.setOneShot(true);//设置循环播放   false表示循环  true表示不循环,仅播放一次
    animationDrawable.start();

开始动画:

   animationDrawable.setOneShot(false);
    animationDrawable.stop();
    animationDrawable.start();

 

停止动画:

 animationDrawable.stop();
    if (animationDrawable1 != null)
    {
     animationDrawable1.stop();
    }

 

增加动画:

if (btnAddFrame.isEnabled())
    {

     animationDrawable1 = (AnimationDrawable) getResources()
       .getDrawable(R.anim.frame_animation1);
     animationDrawable.addFrame(animationDrawable1, 2000);
     btnAddFrame.setEnabled(false);
    }

参数详细说明:

表一

属性[类型] 功能  
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:保持在最下层

 

(二)补间(Tween)动画

如果动画中的图像变换比较有规律时,可以才用自动生成中间图像的方式生成动画,例如图像的移动、旋转、缩放、透明度渐变、正方形变圆形等,这些图像变化过程中的图像都可以根据一定的算法自动生成,我们只需要指定动画的第一帧和最后一帧图像即可,这种自动生成中间图像的动画就是补间动画。

Android SDK提供了4种补间动画效果:移动、缩放、旋转和透明度。如果要实现更复杂的补间动画需要开发人员自己编码。

补间动画文件放在res/anim/资源下。

1.移动动画 TranslateAnimation:

   <?xml version="1.0" encoding="utf-8"?><!-- 移动动画 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:interpolator="@android:anim/decelerate_interpolator">
 <translate android:fromXDelta="0" android:fromYDelta="-100%"
  android:toXDelta="0" android:toYDelta="0" android:duration="1000"
  android:repeatCount="-1" android:repeatMode="reverse" />
</set>

interpolator:表示动画渲染器(通用)。有三个值accelerate_interpolator(动画加速器)、decelerate_interpolator(动画减速器)、accelerate_decelerate_interpolator(动画加速减速器)。加速器是动画开始速度慢,越到后来速度越快,其它加速器类似理解。

fromXDelta:起始X坐标

fromYDelta:起始Y坐标

toXDelta:目标X坐标

toYDelta:目标Y坐标

duration:动画持续时间(通用) 单位毫秒

repeatCount:动画重复次数(通用) 大于零为次数,-1或infinite为无限次

repeatMode:动画重复模式(通用) restart:正常重复 reverse:方向相反重复

 

2.旋转动画 RotateAnimation:

<?xml version="1.0" encoding="utf-8"?><!-- 旋转动画 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:interpolator="@android:anim/decelerate_interpolator">
 <rotate android:fromDegrees="0" android:toDegrees="360"
  android:pivotX="50%" android:pivotY="50%" android:repeatCount="-1"
  android:repeatMode="reverse" android:duration="2000" />
</set>

fromDegrees:开始角度
toDegrees:结束角度
pivotX:表示沿X轴方向旋转的支点位置,如果该值为50%,则支点在沿X轴的中心位置

pivotY:表示沿Y轴方向旋转的支点位置,如果该值为50%,则支点在沿Y轴的中心位置

 

3.缩放动画 ScaleAnimation:

<?xml version="1.0" encoding="utf-8"?><!-- 缩放动画 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:interpolator="@android:anim/decelerate_interpolator">
 <scale android:fromXScale="0.2" android:fromYScale="0.2"
  android:toXScale="1.0" android:toYScale="1.0" android:pivotX="50%"
  android:pivotY="50%" android:duration="1000" android:repeatCount="-1"
  android:repeatMode="reverse" />
</set>

fromXScale:起始X方向缩放比例 0.0最小 1.0原大小 2.0两倍大小

fromYScale:起始Y方向缩放比例

toXScale:结束X方向缩放比例

toYScale:结束Y方向缩放比例

 

4.透明度动画 AlphaAnimation:

  <?xml version="1.0" encoding="utf-8"?><!--
 透明动画 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:interpolator="@android:anim/decelerate_interpolator">
 <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
  android:duration="2000" android:repeatCount="-1" android:repeatMode="reverse" />
</set>

fromAlpha:起始透明度 0.0~1.0 0.0完全透明 1.0完全不透明

toAlpha:结束透明度

以上四种动画可以自由组合成需要的动画,如下即图像缩放同时透明度也改变

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:interpolator="@android:anim/decelerate_interpolator">
 <scale android:fromXScale="0.2" android:fromYScale="0.2"
  android:toXScale="1.0" android:toYScale="1.0" android:pivotX="50%"
  android:pivotY="50%" android:duration="1000" android:repeatCount="-1"
  android:repeatMode="reverse" />

 <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
  android:duration="2000" android:repeatCount="-1" android:repeatMode="reverse" />
</set>

装载补间动画文件需要使用AnimationUtils.loadAnimation()方法,如下:

Animation animation = AnimationUtils.loadAnimation(this,R.anim.test);

将补间动画应用到控件的方法有两种:

1.view.startAnimation(animation);

2.view.setAnimation(animation);

animation.start();

通过代码设置补间动画:

1.animation.setRepeatCount(Animation.INFINITE);设置循环显示

2.public TranslateAnimation(float fromXDelta , float from toXDelta ,float
fromYDelta , float toYDelta); 移动动画

3.其他三种动画与上面的差不多。

 

参数详细说明:

表二

XML节点 功能说明
alpha 渐变透明度动画效果
<alpha
android:fromAlpha=”0.1″
android:toAlpha=”1.0″
android:duration=”3000″ />
fromAlpha

属性为动画起始时透明度

0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之间的float数据类型的数字
toAlpha 属性为动画结束时透明度

表三

scale 渐变尺寸伸缩动画效果
<scale
android:interpolator= “@android:anim/accelerate_decelerate_interpolator”
android:fromXScale=”0.0″
android:toXScale=”1.4″
android:fromYScale=”0.0″
android:toYScale=”1.4″
android:pivotX=”50%”
android:pivotY=”50%”
android:fillAfter=”false”
android:startOffset=“700”
android:duration=”700″
android:repeatCount=”10″ />
fromXScale[float] fromYScale[float] 为动画起始时,X、Y坐标上的伸缩尺寸 0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
toXScale [float]
toYScale[float]
为动画结束时,X、Y坐标上的伸缩尺寸
pivotX[float]
pivotY[float]
为动画相对于物件的X、Y坐标的开始位置 属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置
       

表四

translate 画面转换位置移动动画效果
<translate
android:fromXDelta=”30″
android:toXDelta=”-80″
android:fromYDelta=”30″
android:toYDelta=”300″
android:duration=”2000″ />
fromXDelta
toXDelta
为动画、结束起始时 X坐标上的位置  
fromYDelta
toYDelta
为动画、结束起始时 Y坐标上的位置  
       

表五

rotate 画面转移旋转动画效果
<rotate
android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
android:fromDegrees=”0″
android:toDegrees=”+350″
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”3000″ />
fromDegrees 为动画起始时物件的角度 说明
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)
(负数from——to负数:逆时针旋转)
(正数from——to正数:顺时针旋转)
(正数from——to负数:逆时针旋转)
toDegrees 属性为动画结束时物件旋转的角度 可以大于360度
pivotX
pivotY
为动画相对于物件的X、Y坐标的开始位 说明:以上两个属性值 从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置
       

你可能感兴趣的:(android 帧Frame和补间Tween动画)