Android动画有两种Tween(形变动画)和Frame(帧动画),使用时可以在res\anim路径下创建动画的xml,也可以代码实现。
Tween里包含了:
Scale:缩放动画、Rotate:旋转动画、Translate:移动动画、Alpha::透明渐变动画
Scale:
<scale>标签为缩放节点
android:fromXscale="1.0" 表示开始时X轴缩放比例为 1.0 (原图大小 * 1.0 为原图大小)
android:toXscale="0.0" 表示结束时X轴缩放比例为0.0(原图大小 *0.0 为缩小到看不见)
android:fromYscale="1.0" 表示开始时Y轴缩放比例为 1.0 (原图大小 * 1.0 为原图大小)
android:toYscale="0.0" 表示结束时Y轴缩放比例为0.0(原图大小 *0.0 为缩小的看不到了)
android:pivotX="50%" X轴缩放的位置为中心点
android:pivotY="50%" Y轴缩放的位置为中心点
android:duration="2000" 动画播放时间 这里是2000毫秒也就是2秒
scaleAnimation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(2000);
Rotate:
<rotate>标签为旋转节点
Tween一共为我们提供了3种动画渲染模式。
android:interpolator="@android:anim/accelerate_interpolator" 设置动画渲染器为加速动画(动画播放中越来越快)
android:interpolator="@android:anim/decelerate_interpolator" 设置动画渲染器为减速动画(动画播放中越来越慢)
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 设置动画渲染器为先加速在减速(开始速度最快 逐渐减慢)
如果不写的话 默认为匀速运动
android:fromDegrees="+360"设置动画开始的角度
android:toDegrees="0"设置动画结束的角度
rotateAnimation = new RotateAnimation(360.0f, 0.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(2000);
Translate:
<translate>标签为缩放节点
android:fromXDelta="0" x起始
android:toXDelta="320" x结束
android:fromYDelta="0" y起始
android:toYDelta="480" y结束
android:duration="2000" 间隔
android:repeatCount="infinite" 重复次数
translateAnimation = new TranslateAnimation(0, 320, 0, 480);
translateAnimation.setDuration(2000);
Alpha::
<alpha>标签为alpha透明度节点
android:fromAlpha="1.0" 设置动画起始透明度为1.0 表示完全不透明
android:toAlpha="0.0"设置动画结束透明度为0.0 表示完全透明
也就是说alpha的取值范围为0.0 - 1.0 之间
alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
alphaAnimation.setDuration(2000);
提一下AnimationSet,这是一个动画集合可以放多个动画,控制动画的播放顺序,以上几个动画都可以添加监听,常用的是动画结束监听。
Frame动画:
AnimationDrawable 继承于Drawable
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@drawable/a" android:duration="100" />
<item android:drawable="@drawable/b" android:duration="100" />
<item android:drawable="@drawable/c" android:duration="100" />
<item android:drawable="@drawable/d" android:duration="100" />
<item android:drawable="@drawable/e" android:duration="100" />
<item android:drawable="@drawable/f" android:duration="100" />
<item android:drawable="@drawable/g" android:duration="100" />
<item android:drawable="@drawable/h" android:duration="100" />
<item android:drawable="@drawable/i" android:duration="100" />
<item android:drawable="@drawable/j" android:duration="100" />
</animation-list>
animationDrawable = new AnimationDrawable();
int duration = 70;
animationDrawable.addFrame(getDrawable(R.drawable.ic_pull_refresh_1), duration);
animationDrawable.addFrame(getDrawable(R.drawable.ic_pull_refresh_2), duration);
animationDrawable.addFrame(getDrawable(R.drawable.ic_pull_refresh_3), duration);
animationDrawable.addFrame(getDrawable(R.drawable.ic_pull_refresh_4), duration);
animationDrawable.addFrame(getDrawable(R.drawable.ic_pull_refresh_5), duration);
animationDrawable.setOneShot(false);
imageView.setImageDrawable(animationDrawable);
/**
animationDrawable.start(); 开始这个动画
animationDrawable.stop(); 结束这个动画
animationDrawable.setAlpha(100);设置动画的透明度, 取值范围(0 - 255)
animationDrawable.setOneShot(true); 设置单次播放
animationDrawable.setOneShot(false); 设置循环播放
animationDrawable.isRunning(); 判断动画是否正在播放
animationDrawable.getNumberOfFrames(); 得到动画的帧数。
*/