Android——动画之补间动画(Tween动画)

来源:互联网 发布:编程工具 知乎 编辑:程序博客网 时间:2024/05/01 22:13

一、Android动画分类

1. 补间动画(Tween动画)

      完成视图简单的变化,比如放大,缩小,旋转,透明度的渐变等等。

2.帧动画(Frame动画)

      帧动画是在短时间内连续显示一系列图像的过程,其显示效果是一个移动或者变化的对象。


二、Tween动画分类

1.渐变动画AlphaAnimation

2.移动动画TranslateAnimation

3.缩放动画ScaleAnimation(以某点为中心缩放视图)

4.旋转动画RotateAnimation(以某点为中心旋转视图)


三、Tween动画的创建

假设 ImageView iv = (ImageView)findViewById(R.id.xxx);

 定义一个Animation anim = null;

1. 通过xml方式创建动画

    - 把设置的动画属性写到xml中

     (1)新建xml文件,ResourceType 为TweenAnimation,选择Tween动画的某一类(alpha等)         

<alpha   android:fromAlpha = "1"   android.toAlpha = "0" 完全透明   android:fillAfter = "true"动画完了是否保持结束时的状态   android:duration = "1000" 1000ms</alpha>
   其他类型Tween动画的xml属性

(alpha等Tween动画公用的属性 android:interpolator="@android:anim/**",各种加速器,如先减速后加速等)

<translate   android:fromXDalta="0"   android:toXDelta ="50"向右   android:fromYDalta="0"   android:toYDelta="100"向下   android:duration="1000"   android:fillAfter="false"</translate>
<scale   android:fromXScale="1"   android:fromYScale="1"   android:toXScale="0" 缩小  2就是放大为原来的2倍   android:toYScale="0"   android:pivotX="50%"  锚点   android:pivotY="50%"   android:fillAfter="true"   android:duration="1000"</scale>
<rotate  android:fromDegrees="0"  android:toDegrees="180"  android:pivotX="50%"  android:pivotY="50%"  android:fillAfter="true"  android:duration="1000"</rotate>
<pre name="code" class="html"><!-- 将Tween各类动画组合在一起 --><set xmlns:android="xxxx">   <alpha      ....   </alpha>   <scale     android:startOffset="1000"  1000ms后执行       ...   </scale>   <其他tween类动画   </***></set>


    - 利用AnimationUtils类加载xml

anim=AnimationUtils.loadAnimation(context,动画xml文件ID);如R.anim.xxx //anim为在res下新建的目录

    - 给布局设置动画      

iv.startAnimation(anim);

2. 通过代码动态添加

    - 构造对应的动画类(AlphaAnimation、TranslateAnimation等)

    (1)定义Alpha动画         

AlphaAnimation anim=new AlphaAnimation(1,0);anim.setDuration(1000);anim.setFillAfter(true);
   (2)移动动画

TranslateAnimation anim = new TranslateAnimation(fromXdelta,toXDelta,fromYDelta,toYDelta);anim.setDuration(1000);anim.setFillAfter(true);anim.setInterpolator(context,android.R.anim.xxx);
   (3)形变动画Scale
ScaleAnimation scale=new ScaleAnimation(fromX,toX,fromY,toY,pivotXType,pivotX,//pivotXType为ScaleAnimation.RELATIVE_TO_SELF,即pivotX(0~1)是相对它自己而言的<pre name="code" class="java">pivotYType,
pivotY);

   (4)旋转动画Rotate
RotateAnimation rotate=new RotateAnimation(formDegrees,toDegrees,pivotXType,pivotXValue,pivotYType,pivotYValue);//pivotXType与Scale动画意义一样,值可谓RotateAnimation.RELATIVE_TO_SELFanim.setDuration(1000);anim.setFillAfter(true);anim.setInterpolator(context,android.R.anim.xxx);
  (5)set(动画的组合)

AnimationSet anim=new AnimationSet(是否共享加速器false);anim.setFillAfter(true);anim.setDuration(1000);AlphaAniamtion alpha = new AlphaAnimation(...)alpha.setXXX(...);ScaleAnimation scale = new ScaleAnimation(...);scale.setXXX(...);scale.setStartOffset(1000);//延迟1000ms执行anim.addAnimation(alpha);anim.addAnimation(scale);

    - 设置动画参数

    - 给布局设置动画

四、动画的监听 AnimationListener接口

anim.setAnimationListener(new AnimationListener listener{   onAnimationStart(Animation animation){ //动画开始   }   onAnimationEnd(Animation animation){ //动画结束   }   onAnimationRepeat(Animation animation){ //动画重播 //anim.setRepeatCount(X);可以设置动画重播次数 -1为无限重播   }});

动画开始——动画重播——......——动画重播——动画结束



0 0
原创粉丝点击