android 动画研究

来源:互联网 发布:男士单肩包 知乎 编辑:程序博客网 时间:2024/06/05 10:09
 
Animations是一套实现动画的API


Animations的分类
1、 Tweened Animations渐变动画、补间动画
提供了旋转、移动、伸展和淡出等效果
2、 Frame-by-Frame Animations
可以创建一个Drawable序列,这些Drawable可以按照指定的时间间歇一个一个的显示。




Tweened Animations的分类
1、 Alpha:淡入淡出效果
2、 Scale:缩放效果
3、 Rotate:旋转效果
4、 Translate:移动效果


Animations的第一种使用方法:


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


Animation的四个子类:
AlphaAnimation、TranslateAnimation、ScaleAnimation、RotateAnimation


private class RotateButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
//创建一个AnimationSet对象
AnimationSet animationSet = new AnimationSet(true);
//创建一个RotateAnimation对象
RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_PARENT, 0.5f,
Animation.RELATIVE_TO_PARENT, 0.2f);////旋转点的x坐标为0.5倍父控件的宽度,y坐标为0.2倍父控件的长度
//设置动画执行的时间(单位:毫秒)
rotateAnimation.setDuration(5000);
//将RotateAnimation对象添加到AnimationSet当中
animationSet.addAnimation(rotateAnimation);
//开始动画
imageView.setAnimation(animationSet);
}
}
    private class ScaleButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
//创建一个AnimationSet对象
AnimationSet animationSet = new AnimationSet(true);
//创建一个ScaleAnimation对象
ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f, 1, 0.1f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
//设置动画执行的时间(单位:毫秒)
scaleAnimation.setDuration(5000);
//将ScaleAnimation对象添加到AnimationSet当中
animationSet.addAnimation(scaleAnimation);
//开始动画
imageView.setAnimation(animationSet);
}
    }
    
    private class AlphaButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
//创建一个AnimationSet对象
AnimationSet animationSet = new AnimationSet(true);
//创建一个AlphaAnimation对象
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
//设置动画执行的时间(单位:毫秒)
alphaAnimation.setDuration(1000);
//将AlphaAnimation对象添加到AnimationSet当中
animationSet.addAnimation(alphaAnimation);
//开始动画
imageView.setAnimation(animationSet);
}
    }
    
    private class TranslateButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
//创建一个AnimationSet对象
AnimationSet animationSet = new AnimationSet(true);
//创建一个TranslateAnimation对象
TranslateAnimation translateAnimation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 1.0f);
//设置动画执行的时间(单位:毫秒)
translateAnimation.setDuration(5000);
//将TranslateAnimation对象添加到AnimationSet当中
animationSet.addAnimation(translateAnimation);
//开始动画
imageView.setAnimation(animationSet);
}
    }




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








Animations的第二种使用方法:


1、 在res文件夹下面新建一个名为anim的文件夹
2、 创建xml文件,并首先加入set标签,改标签如下:
<set xmlns:android= "http://schemas.android.com/apk/res/android"
android:interpolator= "@android:anim/accelerate_interpolator">
</set>
在该标签当中加入rotate, alpha, scale或者translate标签
3、 在代码当中使用AnimationUtils当中装载xml文件,并生成Animation对象














Alpha的xml文件编写方法 alpha.xml
<<alpha android:fromAlpha= "0.1"
android:toAlpha= "0.0"
android:startOffset= "500"
android:duration= "500" />


代码中:
Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
imageView.startAnimation(animation);




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


translate的xml文件编写方法
<translate android:fromXDelta="50%"
android:toXDelta="100%"
android:fromYDelta="0%"
android:toYDelta="100%"
android:duration="2000" />


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"/>














AnimationSet
1、 AnimationSet是Animation的子类
2、 一个AnimationSet包含了一系列的Animation
3、 针对AnimationSet设置一些Animation的常见属性(如startOffset, duration等等),可以被包含在AnimationSet当中的Animation集成。


往AnimationSet中加入多个动画
//创建一个AnimationSet对象
AnimationSet animationSet = new AnimationSet(true);
//创建一个RotateAnimation对象
RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_PARENT, 0.5f,
Animation.RELATIVE_TO_PARENT, 0.2f);////旋转点的x坐标为0.5倍父控件的宽度,y坐标为0.2倍父控件的长度
//创建一个AlphaAnimation对象
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
//将AlphaAnimation对象添加到AnimationSet当中
animationSet.addAnimation(alphaAnimation);
//设置动画执行的时间(单位:毫秒)
animationSet.setDuration(5000);
//将RotateAnimation对象添加到AnimationSet当中
animationSet.addAnimation(rotateAnimation);
//开始动画
imageView.setAnimation(animationSet);


也可以在加载布局文件的时候,布局文件里面定义多个动画效果。




什么是Interpolator
Interpolator定义动画变化的速率,在Animations框架当中定义了以下几种Interpolator:
1、AccelerateDecelerateInterpolator:在动画开始与结束的地方速率改变比较慢,在中间的时候加速
2、AccelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始加速
3、CycleInterpolator:动画循环播放特定的次数,速率改变沿着正弦曲线
4、DecelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始减速。
5、LinearInterpolator:在动画的以均匀的速率改变


在xml里面设置:android:interpolator= ….
在代码里设置: (AlphaAnimation、AnimationSet等)animation.setInterpolator(new DecelerateInterpolator());








Frame-By-Frame Animations的使用方法:
在res/drawable当中创建一个xml文件(如anim_nv.xml),用于定义Animations的动画序列:
<animation-list  >
<item />
<item   />
</animation-list>


代码里:
imageView.setBackgroundResource(R.drawable.anim_nv);
AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
animationDrawable.start();






什么是LayoutAnimationController
1、 LayoutAnimationController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果。
2、 每一个控件都有相同的动画效果
3、 这些控件的动画效果在不同的时间显示出来
4、 LayoutAnimationController可以在xml文件当中设置,也可以在代码当中进行设置。




在xml当中使用LayoutAnimationController
1、 在res/anim文件夹当中创建一个新文件,名为list_anim_layout.xml文件:
<layoutAnimation xmlns:android= http://schemas.android.com/apk/res/android
android:delay= “0.5”
android:animationOrder= “random”
android:animation= “@anim/list_anim” />
2、 在布局文件当中为ListView添加如下配置:
android:layoutAnimation= “@anim/list_anim_layout”




在代码当中使用LayoutAnimationController
1、 创建一个Animation对象:
可以通过装载xml文件,或者直接使用Animation的构造函数创建Animation对象
Animation animation = (Animation)AnimationUtils.loadAnimation(MainActivity.this, R.anim.list_item);
2、 使用如下代码创建LayoutAnimationController对象:
LayoutAnimationController lac = new LayoutAnimationController(animation);
3、 设置控件显示的顺序:
Lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
4、 为ListView设置LayoutAnimationController属性:
listView.setLayoutAnimation(lac);


什么是AnimationListener
1、 AnimationListener是一个监听器
2、 该监听器在动画执行的各个阶段会得到通知,从而调用相应的方法
3、 主要包含以下三个方法:
a) onAnimationEnd(Animation animation)
b) onAnimationRepeat(Animation animation)
c) onAnimationStart(Animation animation)


animation.setAnimationListener()
原创粉丝点击