一、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为无限重播
}
});
动画开始——动画重播——......——动画重播——动画结束