Android动画分类:属性动画(Property Animation),视图动画(View Animation),过渡动画(Transition Animation)。
属性动画:在动画的过程中通过改变对象的属性来达到动态效果。这里的对象不局限于视图View,可以是任何你想要的对象。
属性动画相关的类:AnimatorSet、ObjectAnimator、ValueAnimator、TimeInterpolator插值器、TypeEvaluator估值器。
ObjectAnimator:直接动画所给的对象,他会调用对象对应属性的get/set方法吧属性的值设置给对象的属性,直接实现动画效果。
ValueAnimator:针对属性的值进行动画的 ,不会对UI造成改变,不能直接实现动画效果。需要通过对动画的监听去做一些操作,在监听中将这个值设置给对应的属性,对应的属性才会改变。
AnimatorSet:可以定义多个(AnimatorSet、ObjectAnimator、ValueAnimator)动画,是动画的集合。
TimeInterpolator插值器:根据时间流速计算数值变化比例,重点是数值变化的比例。
TypeEvaluator估值器:根据插值器计算出的数值变化比例,计算最终的具体数值。当要变化的值自定义对象的时候可能就需要自定义TypeEvaluator估值器了。
属性动画的使用:
(1) XML文件定义属性动画:第一步,创建一个XML属性动画资源文件(res/animation目录下)。
android:ordering="together">
android:propertyName="rotation"
android:duration="10000"
android:valueFrom="0f"
android:valueTo="360f"
android:valueType="floatType"
android:interpolator="@android:anim/accelerate_interpolator"/>
android:propertyName="alpha"
android:duration="10000"
android:valueFrom="0"
android:valueTo="1f"
android:valueType="floatType" />
第二步,启动资源文件动画
AnimatorSet animationSet = (AnimatorSet) AnimatorInflater.loadAnimator(mContext, R.animator.property_set);
animationSet.setTarget(mImageView);
animationSet.start();
(2)JAVA方式定义属性动画
AnimatorSet animatorSet = new AnimatorSet();
//旋转
ObjectAnimator objectXAnimator = ObjectAnimator.ofFloat(mImageView, "rotation", 0f, 360f);
objectXAnimator.setDuration(10000);
animatorSet.playTogether(objectXAnimator);
//渐变
ObjectAnimator objectAlphaAnimator = ObjectAnimator.ofFloat(mImageView, "alpha", 0f, 1f);
objectAlphaAnimator.setDuration(10000);
AnimatorSet animatorSetResult = new AnimatorSet();
animatorSetResult.playTogether(animatorSet, objectAlphaAnimator);
animatorSetResult.start();
视图动画分为:补间动画和帧动画
补间动画:一般是平移、缩放、旋转、透明度,或者其组合,可以用代码或者xml文件的形式,推荐使用xml文件形式,因为可以复用。
补间动画相关的类:TranslateAnimation(平移)、ScaleAnimation(缩放)、RotateAnimation(旋转)、AlphaAnimation(j渐变)、AnimationSet(上述的组合动画),对应的的XML标签为translate、 scale、 rotate、alpha、set,其中set里还可以放set,然后放在放置在res/anim/目录下。
补间动画使用:
(1) xml形式定义补间动画:view_animation.xml
// 采用 标签表示平移动画
// 以下参数是4种动画效果的公共属性,即都有的属性
android:duration="3000"// 动画持续时间(ms),必须设置,动画才有效果
android:startOffset ="1000"// 动画延迟开始时间(ms)
android:fillBefore = “true” // 动画播放完后,视图是否会停留在动画开始的状态,默认为true android:fillAfter = “false” // 动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为false
android:fillEnabled= “true” // 是否应用fillBefore值,对fillAfter值无影响,默认为true android:repeatMode= “restart” // 选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restart|
android:repeatCount = “0” // 重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复 android:interpolator = @[package:]anim/interpolator_resource // 插值器,即影响动画的播放速度,下面会详细讲
// 以下参数是平移动画特有的属性
android:fromXDelta="0"// 视图在水平方向x 移动的起始值
android:toXDelta="500"// 视图在水平方向x 移动的结束值
android:fromYDelta="0"// 视图在竖直方向y 移动的起始值
android:toYDelta="500"// 视图在竖直方向y 移动的结束值 />
代码中设置:
Button mButton = (Button) findViewById(R.id.Button);
// 步骤1:创建 需要设置动画的 视图View
Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.view_animation);
// 步骤2:创建 动画对象 并传入设置的动画效果xml文件
mButton.startAnimation(translateAnimation);
(2)JAVA方式定义补间动画
Button mButton = (Button) findViewById(R.id.Button);
Animation translateAnimation = new TranslateAnimation(0,500,0,500);
translateAnimation.setDuration(3000);
mButton.startAnimation(translateAnimation);
帧动画:由一帧帧的图片组合出来。通过指定图片展示的顺序,达到动画的展示的动态效果。
帧动画使用:
官方推荐使用XML文件,放在res/drawable/路径下
android:oneshot="true"> // true表示只执行一次动画,false表示无限循环,
代码中设置:
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rocketAnimation.start(); //开始
// rocketAnimation.stop(); 停止
}
});
寄语:你纵有归来时候,为甚要向我温柔。——郭沫若《郭沫若诗集》
举报/反馈