Android学习笔记--Animation

来源:互联网 发布:淘宝靠谱的数码店 编辑:程序博客网 时间:2024/06/05 12:05
Animations

Animations,顾名思义,就是动画效果。

Animations提供了一系列的动画效果,这些效果可以应用在绝大多数的控件。



Animations的分类:
Animations从总体来说可以分为两大类:
第一类:TweenedAnimations。渐变动画。该类Animations提供了旋转,移动,伸展和淡出等等效果。

第二类:Frame-by-FrameAnimations。这一类Animations可以创建一个Drawable序列,这些Drawable可以按照指定的时间间歇一个一个的显示。


Tweened Animations的分类:
1.Alpha:淡入淡出效果

2.Scale:缩放效果

3.Rotate:旋转效果

4.Translate:移动效果


使用Tweened Animations的步骤
1.创建一个AnimationSet对象。
2.根据需要创建相应的Animation对象
3.根据软件动画的需求,为Animation对象设置相应的数据。
4.将Animation对象添加到AnimationSet对象当中。
5.使用控件对象开始执行AnimationSet。

Tween Animations的通用属性
1.setDuration(long durationMills)
    设置动画持续时间(单位毫秒)
2.setFillAfter(boolean fillAfter)
   如果fillAfter的值为true,则动画执行后,控件将停留在执行结束的状态。
3.setFillBefore(boolean fillBefore)
   如果fillBefore的值为true,则动画执行后,控件将回到动画执行前的状态。
4.setStartOffSet(long startOffSet)
    设置动画执行之前的等待时间。
5.setRepeatCount(int repeatCount)
    设置动画重复执行的次数。



先以Alpha为例,假设我们是用一个按钮来触发Animations,然后以一个ImageView来进行动画效果的演示。我们可以这样来实现按钮监听器的onClick方法。
(这里假设所有控件均已经findViewById,创建好控件对象)
// 创建一个AnimationSet对象
AnimationSet animationSet = new AnimationSet(true);
//创建一个AlphaAnimation对象,两个参数表示从一个什么透明度变化到什么透明度,1代表不透明,0代表完全透明。
AlphaAnimation alphaAnimation = new AlphaAnimation(1,0);
// 表示此动画执行的时间,以毫秒为单位
alphaAnimation.setDuration(1000);
// 将AlphaAnimation对象添加到AnimationSet当中
animationSet.addAnimation(alphaAnimation);
// ImageView对象开始动画 
imageView.startAnimation(animationSet);


接下来是Scale,假设条件与Alpha一样。onClick方法:
// 创建一个AnimationSet对象
AnimationSet animationSet = new AnimationSet(true);
// 创建一个scaleAnimation对象,
// 第一个参数,X轴方向的原始大小。第二个参数:X轴方向变化后的大小。
// 第三个参数,Y轴方向的原始大小。第四个参数:Y轴方向变化后的大小。
// 第五六七八个参数,与下一个Rotate的类似。
ScaleAnimation scaleAnimation = new scaleAnimation(1, 0.1f, 1,0.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
// 表示此动画执行的时间,以毫秒为单位
scaleAnimation.setDuration(1000);
// 将scaleAnimation添加到AnimationSet当中
animationSet.addAnimation(scaleAnimation);
// ImageView对象开始动画 
imageView.startAnimation(animationSet);


Rotate。onClick方法:
// 创建一个AnimationSet对象
AnimationSet animationSet = new AnimationSet(true);
// 创建一个RotateAnimation对象
// 第一个参数:开始旋转的角度;第二个参数:旋转到的角度;
// 后四个参数用来设置旋转轴的圆心:
//第三个参数:X轴坐标类型。有ABSOLUTE,RELATIVE_TO_SELF,RELATIVE_TO_PARENT三种。第四个参数:与第三个参数相对应来设置
//第五个参数:Y轴坐标类型。有ABSOLUTE,RELATIVE_TO_SELF,RELATIVE_TO_PARENT三种。第六个参数:与第三个参数相对应来设置
RotateAnimation rotateAnimation = newRotateAnimation(0,360,Animation.RELATIVE_TO_PARENT,1f,Animation.RELATIVE_TO_PARENT,0f);
// 表示此动画执行的时间,以毫秒为单位
rotateAnimation.setDuration(1000);
// 将rotateAnimation添加到AnimationSet当中
animationSet.addAnimation(rotateAnimation);
// ImageView对象开始动画 
imageView.startAnimation(animationSet);



Translate。onClick方法:
// 创建一个AnimationSet对象
AnimationSet animationSet = new AnimationSet(true);
// 创建一个TranslateAnimation对象
TranslateAnimation translateAnimation = newTranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,1.0f);
// 表示此动画执行的时间,以毫秒为单位
translateAnimation.setDuration(1000);
// 将translateAnimation添加到AnimationSet当中
animationSet.addAnimation(translateAnimation );
// ImageView对象开始动画 
imageView.startAnimation(animationSet);



用代码来实现,在调试方面会很方便,但是,它也有它的弱点,这样会降低了它的代码复用性。
因此,我们可以在xml文件当中来设置动画,这样可以提高了代码的复用性,也提高了代码的可维护性。
而用xml文件来设置动画,由于它没有一个编译的过程,因而,我们在调试程序的过程中会更加地困难一些。

下面是用xml来设置动画的步骤:
1.在res文件夹下面新建一个名为anim的文件夹。

2.创建xml文件,并首先加入set标签,改标签如下:
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">
</set>

3.在该标签当中加入rotate,alpha,scale或者translate标签。

4.在代码当中使用AnimationUtils当中装载xml文件,并生成Animation对象。


Alpha的xml文件编写方法:
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="3000"/>

Rotate的xml文件编写方法:
<rotate
android:fromDegrees="0"
android:toDegrees="+350"
android:pivotX="50%"
android:pivotY="50%"
android:duration="3000"/>
注:android:pivotX的值共有三种设置方法:
1.android:pivot="50"这种方法使用绝对位置定位。
2.android:pivot="50%"这种方法相对于控件本身定位。
3.android:pivot="50%p"这种方法相对于控件的父控件定位。

Translate的xml文件编写方法
<translate
android:fromXDelta="50%"
android:toXDelta="100%"
android:fromYDelta="0%"
android:toYDelta="100%"
android:duration="2000"/>
注:fromXDelta,toXDelta,fromYDelta,toYDelta的值与Rotate上的说明一样。

Scale的xml文件编写方法
<scale
android:fromXScale="1.0"
android:toXScale="0.0"
android:fromYScale="1.0"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"/>


下面是代码里如何引用这些动画:
以在Alpha的触发按钮里onClick方法为例,其他几种动画的设置方法一样,只需要在loadAnimation里引用相应的ID即可(第一个参数是自己编写的Activity类对象):
// 装载动画设置文件
Animation animation =AnimationUtils.loadAnimation(YourActivity.this,R.anim.alpha);
//在上面的代码中,我们传进去的是AnimationSet,因为AnimationSet是Animation的子类
imageView.startAnimation(animation);
0 0