android 顺序动画,Android爬坑之路(二十三)动画总结上篇

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(); 停止

}

});

寄语:你纵有归来时候,为甚要向我温柔。——郭沫若《郭沫若诗集》

474e2c836396b158a03d686b73cb559e.png

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值