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

一、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_SELF
anim.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为无限重播
   }
});

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值