帧动画Frame Animation (AnimationDrawable)
帧动画很简单,就是不同的图片切换形成动画效果
补间动画,友称View动画(Tween Animation
)
设置动画常用的API
- setDuration()设置动画时长
- setRepeatCount()设置播放次数
- setRepeatMode()设置模式
- Animation.RESTART重新开始
- Animation.INFINITE无限循环
- Animation.REVERSE原路返回
- setFillAfter()指示动画完成后的控件的状态是否停留在动画停止的时候的状态
- setAnimationListener()设置动画监听
- setStartOffset()设置动画开始等待的时间
- startAnimation()开始动画
补间动画又分为4中
- 透明 AlphaAnimation 在XML文件中 alph
- 旋转 RotateAnimation 在XML文件中 rotate
- 缩放 ScaleAnimation 在XML文件中 scale
- 平移 TranslateAnimation 在XML文件中 translate
还有一个动画集合AnimationSet把多个动画一起执行,例如执行平移又执行缩放
XML中定义动画
在res下新建一个anim文件夹动画的xml文件都放在该文件夹下
要定义上动画就把动画名称作为跟标签,例如 透明动画跟标签使用alph
<?
xml version=
"1.0"
encoding=
"utf-8"
?>
<alpha
xmlns:
android
=
"http://schemas.android.com/apk/res/android"
android
:fromAlpha=
"1.0"
android :toAlpha= "0.0" >
</alpha>
android :toAlpha= "0.0" >
</alpha>
AnimationUtils.loadAnimation()加载一个xml的动画
//透明度动画的参数,透明度的取值0.0到1.0之间 AlphaAnimation alpha = new AlphaAnimation(1.0f, 0.0f); alpha.setDuration(2000); //动画执行次数 alpha.setRepeatCount(3); //执行动画前的等待时间 alpha.setStartOffset(1000); //动画模式 alpha.setRepeatMode(Animation.REVERSE); //开始动画 mIv.startAnimation(alpha); //动画监听 alpha.setAnimationListener(new Animation.AnimationListener() { //开始动画调用 @Override public void onAnimationStart(Animation animation) { Log.d(TAG, "onAnimationStart: 动画开始了"); } //结束动画调用 @Override public void onAnimationEnd(Animation animation) { Log.d(TAG, "onAnimationStart: 动画结束了"); } //动画执行一次,就会调用一次,不是动画结束 @Override public void onAnimationRepeat(Animation animation) { Log.d(TAG, "onAnimationRepeat: -------------"); } });
//view动画的最大缺点是,在移动了view的时候只是改变的view的显示位置,并没有用改变View的属性
//例如一个按钮,在移动了之后他的点击事件还在按钮的初始位置,而按钮的显示位置已经移动了,
//显示位置上并没有点击事件,点击之后没有效果.按钮的点击事件还是在原来的位置上
属性动画property Animation
//属性动画的核心类 ValueAnimation,属性动画的机制是不断的对属性值操作实现的
//ObjectAnimator是继承自ValueAnimation //参数1动画作用的对象, 这里使用的是ImageView //参数2要改变view的属性,指定要改变view的那个属性,然而TextView并没有alpha属性,ObjectAnimator是怎样操作的呢? //ObjectAnimator内部的机制不是直接找alpha属性,而是找该属性对应的get和set方法,因此alpha对应的 //get和set方法是public void setAlpha(float value); public float getAlpha(); // 参数3.4,alpha属性的取值范围 ObjectAnimator ani = ObjectAnimator.ofFloat(mIv,"alpha",1.0f,0.0f); ani.setDuration(2000); ani.setRepeatCount(2); ani.start();
组合动画(AnimatorSet)
实现组合动画主要借助AnimationSet类,这个类提供了一个play(),如果我们想该方法中传入一个动画对象(ValueAnimator和ObjectAnimator)
将返回一个 AnimatorSet. Builder的实例,AnimatorSet. Builder中有四个方法
- after(long delay) 将现有动画延迟指定毫秒后执行
- after(long delay) 将现有动画延迟指定毫秒后执行
- before(Animator anim) 将现有动画插入到传入的动画之前执行
- with(Animator anim) 将现有动画和传入的动画同时执行