Android 动画
2016-08-09 17:04
253 查看
一、
android动画分为 属性动画 和 View动画。 View动画又分为 补间动画和帧动画
二、详细介绍
1、属性动画
属性动画的xml文件定义在 res/animator 文件夹下
语法:
< set > 对应的是AnimatorSet 它的item可以是< objectAnimator >、< valueAnimator >
或者其他的 < set > 元素
android:ordering 它的取值可以使 “sequentially” 或 together.。sequentially表示顺序执行所有的子animator 。 together表示同时执行所有的animator.
< objectAnimator >
android:propertyName 表示属性动画的作用对象的属性名称。
android: valueFrom 表示属性动画的 起始值
android:valueTo 表示属性动画的结束值
android:startOffset 表示动画的延迟时间,当动画开始后,需要延时多少毫秒才会真正播放此动画
android:repeatCount 表示动画的重复次数。
android :repeatMode 表示动画的重复模式。
android: valueType 表示android:propretyName所指定的属性的类型,有”intType”和“floatType” 两个可选项,分别表示属性的类型为整形和浮点型。如果android:propretyName所指定的属性表示的是颜色,那么不需要指定andriod:valueType,系统会自动对颜色类型的属性做处理。
android:duration 表示动画时长
使用示例:
也可以使用代码直接使用代码:
如果我们单独使用ObjectAnimator可以这样:
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); 为社会一个时间差值器
注意这里 PropertyName 为 x 如果要实现效果目标对象必须要有对应的 set和 get方法,即目标对象必须要有 setX()以及 getX()方法。
在来看ValueAnimator如果使用:
如果对象的属性没有 对应的set和get方法,我们就可以使用ValueAnimator 集合一个估值器来进行操作,示例就将ivTaget的宽度在5秒内从 0变到了 500
2、补间动画
部件动画的xml定义放在 res/anim文件夹下
语法:
补间动画有四种变换:
平移、旋转、缩放、透明度
他们分别对应的子类和标签为:
平移动画 < translate > TranslateAnimation
缩放动画 < scale > ScaleAnimation
旋转动画 < rotate > RotateAnimation
透明度动画 < alpha > AlphaAnimation
android:interpolator : 表示动画集合所采用的插值器,插值器影响动画的速度,比如非匀速动画就需要通过插值器来控制动画的播放过程。这个属性可以不指定,默认为@android:anim/accelerate_decclerate_interpolater ,即加速减速插值器
插值器可以选:
android:shareInterpolator 表示集合中的动画是否和集合共享一个插值器。
< translate > 标签表示平移动画,它的一系列属性如下
android:fromXDelta ——表示x的起始值,比如0;
android :toXDelta———-表示x的结束值,比如100;
android: fromYDelta——表示 y的起始值,
android:toYDelta———-表示y的结束值
< scale >标签 表示缩放动画,对应ScaleAnimation,它即可以使View具有放大或者缩小的动画效果,它的一系列属性的含义如下:
android: fromXScale ——水平方向缩放的起始值,比如0.5;
android: toXScale—— 水平方向缩放的结束值,比如1.2;
android:fromYScale——竖直方向缩放的起始值
android:toYScale——-竖直方向缩放的结束值
androdi:pivotX———-缩放的轴点的x坐标,它会影响缩放的效果
android:pivotY———-缩放的轴点的y坐标,它会影响缩放的效果
< rotate > 标签表示旋转动画,对于RotateAnimation,它可以是View具有旋转动画效果,它的属性的含义如下:
android:fromDegress———旋转开始的角度,比如0;
android:toDegress———-旋转结束的角度,比如180;
android:pivotX ————旋转的轴点的 x坐标
android:pivotY————-旋转的轴点的y 坐标
< alpha > 标签表示透明度动画,对应AlphaAnimation,它可以改变View的透明度,它的属性含义如下:
android:fromAlpha ——–表示透明度的起始值,比如0.1;
android:toAlpha———–表示透明度的结束值 比如1;
andrdoid:duration———–表示的动画的持续时间
android:fillAfter———-动画结束以后View是否停留在结束的位置,true表示View停留咋结束位置,false则不停留。
示例:
3、 帧动画
帧动画的xml位于 res/drawable中
语法:
oneshort 如果为true表示 循环执行这个动画,为false 表示 只执行一次
< item >中
drawable表示 指向的drawable
duration 表示时长
示例:
4、View动画的特殊使用场景
a、LayoutAnimator
LayoutAnimator作用于ViewGrop,为ViewGrop指定一个动画,这样当它的子元素出厂时都会具有这种动画效果,
定义:
android:delay 表示开始动画的时间延迟,比如子元素入场动画的时间周期为300ms,那么0.5表示每个质子元素都延迟150ms才能播放入场动画,第一个元素延时150ms,第二个延迟 300ms依次类推
android:animatorOrder 有三种选项 normal、reverse和 random,其中normal表示顺序显示,即排在前面的子元素最先开始播放入场动画,reverse表示逆向显示,即排在后面的子元素开始播放动画,random则是随机。
在xml中使用:
在java中使用:
b、Activity的切换效果
Activity有默认的切换效果,但是这个效果我们可以自己定义的,主要用到OverPendingTransition(int enterAnim,int exitAnim)这个方法,这个方法必须在startActivity(Intent)后者finish()之后被调用才能生效,它的参数含义如下:
enterAnim——–Activity被打开时,所需的动画资源id
exitAnim———Activity被暂停时,所需的动画资源id.
使用:
android动画分为 属性动画 和 View动画。 View动画又分为 补间动画和帧动画
二、详细介绍
1、属性动画
属性动画的xml文件定义在 res/animator 文件夹下
语法:
<set android:ordering=["together" | "sequentially"]> <objectAnimator android:propertyName="string" android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["repeat" | "reverse"] android:valueType=["intType" | "floatType"]/> <animator android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["repeat" | "reverse"] android:valueType=["intType" | "floatType"]/> <set> ... </set> </set>
< set > 对应的是AnimatorSet 它的item可以是< objectAnimator >、< valueAnimator >
或者其他的 < set > 元素
android:ordering 它的取值可以使 “sequentially” 或 together.。sequentially表示顺序执行所有的子animator 。 together表示同时执行所有的animator.
< objectAnimator >
android:propertyName 表示属性动画的作用对象的属性名称。
android: valueFrom 表示属性动画的 起始值
android:valueTo 表示属性动画的结束值
android:startOffset 表示动画的延迟时间,当动画开始后,需要延时多少毫秒才会真正播放此动画
android:repeatCount 表示动画的重复次数。
android :repeatMode 表示动画的重复模式。
android: valueType 表示android:propretyName所指定的属性的类型,有”intType”和“floatType” 两个可选项,分别表示属性的类型为整形和浮点型。如果android:propretyName所指定的属性表示的是颜色,那么不需要指定andriod:valueType,系统会自动对颜色类型的属性做处理。
android:duration 表示动画时长
使用示例:
<set android:ordering="sequentially"> <set> <objectAnimator android:propertyName="x" android:duration="500" android:valueTo="400" android:valueType="intType"/> <objectAnimator android:propertyName="y" android:duration="500" android:valueTo="300" android:valueType="intType"/> </set> <objectAnimator android:propertyName="alpha" android:duration="500" android:valueTo="1f"/> </set>
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.anim.property_animator); set.setTarget(myObject); set.start();
也可以使用代码直接使用代码:
AnimatorSet set =new AnimatorSet(); set.playTogether( ObjectAnimator.ofFloat(ivTarget,"rotationX",0,360), ObjectAnimator.ofFloat(ivTarget,"rotationY",0,360), ObjectAnimator.ofFloat(ivTarget,"rotation",0,360), ObjectAnimator.ofFloat(ivTarget,"translationX",0,90), ObjectAnimator.ofFloat(ivTarget,"alpha",1,0.25f,1) ); set.setDuration(5000).start();
如果我们单独使用ObjectAnimator可以这样:
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(ivTarget, "x", 0, 300); objectAnimator.setTarget(ivTarget); objectAnimator.setDuration(2000); objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); objectAnimator.start();
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); 为社会一个时间差值器
注意这里 PropertyName 为 x 如果要实现效果目标对象必须要有对应的 set和 get方法,即目标对象必须要有 setX()以及 getX()方法。
在来看ValueAnimator如果使用:
ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 200); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { /*一个Int 估值器*/ private IntEvaluator mEvaluator =new IntEvaluator(); @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public void onAnimationUpdate(ValueAnimator animation) { /*这里的值将从 0 --- 200*/ int currentValue = (int) animation.getAnimatedValue(); Log.i(TAG, "onAnimationUpdate: currentValue: " + currentValue); float fraction = animation.getAnimatedFraction(); /*这里的值 将从 0--- 1*/ Log.i(TAG, "onAnimationUpdate: fraction: " + fraction); ViewGroup.LayoutParams layoutParams = ivTarget.getLayoutParams(); layoutParams.width = mEvaluator.evaluate(fraction,0,500); ivTarget.setLayoutParams(layoutParams); } }); valueAnimator.setDuration(5000).start();
如果对象的属性没有 对应的set和get方法,我们就可以使用ValueAnimator 集合一个估值器来进行操作,示例就将ivTaget的宽度在5秒内从 0变到了 500
2、补间动画
部件动画的xml定义放在 res/anim文件夹下
语法:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@[package:]anim/interpolator_resource" android:shareInterpolator=["true" | "false"] > <alpha android:fromAlpha="float" android:toAlpha="float" /> <scale android:fromXScale="float" android:toXScale="float" android:fromYScale="float" android:toYScale="float" android:pivotX="float" android:pivotY="float" /> <translate android:fromXDelta="float" android:toXDelta="float" android:fromYDelta="float" android:toYDelta="float" /> <rotate android:fromDegrees="float" android:toDegrees="float" android:pivotX="float" android:pivotY="float" /> <set> ... </set> </set>
补间动画有四种变换:
平移、旋转、缩放、透明度
他们分别对应的子类和标签为:
平移动画 < translate > TranslateAnimation
缩放动画 < scale > ScaleAnimation
旋转动画 < rotate > RotateAnimation
透明度动画 < alpha > AlphaAnimation
android:interpolator : 表示动画集合所采用的插值器,插值器影响动画的速度,比如非匀速动画就需要通过插值器来控制动画的播放过程。这个属性可以不指定,默认为@android:anim/accelerate_decclerate_interpolater ,即加速减速插值器
插值器可以选:
android:shareInterpolator 表示集合中的动画是否和集合共享一个插值器。
< translate > 标签表示平移动画,它的一系列属性如下
android:fromXDelta ——表示x的起始值,比如0;
android :toXDelta———-表示x的结束值,比如100;
android: fromYDelta——表示 y的起始值,
android:toYDelta———-表示y的结束值
< scale >标签 表示缩放动画,对应ScaleAnimation,它即可以使View具有放大或者缩小的动画效果,它的一系列属性的含义如下:
android: fromXScale ——水平方向缩放的起始值,比如0.5;
android: toXScale—— 水平方向缩放的结束值,比如1.2;
android:fromYScale——竖直方向缩放的起始值
android:toYScale——-竖直方向缩放的结束值
androdi:pivotX———-缩放的轴点的x坐标,它会影响缩放的效果
android:pivotY———-缩放的轴点的y坐标,它会影响缩放的效果
< rotate > 标签表示旋转动画,对于RotateAnimation,它可以是View具有旋转动画效果,它的属性的含义如下:
android:fromDegress———旋转开始的角度,比如0;
android:toDegress———-旋转结束的角度,比如180;
android:pivotX ————旋转的轴点的 x坐标
android:pivotY————-旋转的轴点的y 坐标
< alpha > 标签表示透明度动画,对应AlphaAnimation,它可以改变View的透明度,它的属性含义如下:
android:fromAlpha ——–表示透明度的起始值,比如0.1;
android:toAlpha———–表示透明度的结束值 比如1;
andrdoid:duration———–表示的动画的持续时间
android:fillAfter———-动画结束以后View是否停留在结束的位置,true表示View停留咋结束位置,false则不停留。
示例:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /> <set android:interpolator="@android:anim/accelerate_interpolator" android:startOffset="700"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="400" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="400" /> </set> </set>
ImageView image = (ImageView) findViewById(R.id.image); Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); image.startAnimation(hyperspaceJump);
3、 帧动画
帧动画的xml位于 res/drawable中
语法:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot=["true" | "false"] > <item android:drawable="@[package:]drawable/drawable_resource_name" android:duration="integer" /> </animation-list>
oneshort 如果为true表示 循环执行这个动画,为false 表示 只执行一次
< item >中
drawable表示 指向的drawable
duration 表示时长
示例:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/rocket_thrust1" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust2" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /> </animation-list>
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.setBackgroundResource(R.drawable.rocket_thrust); rocketAnimation = (AnimationDrawable) rocketImage.getBackground(); rocketAnimation.start();
4、View动画的特殊使用场景
a、LayoutAnimator
LayoutAnimator作用于ViewGrop,为ViewGrop指定一个动画,这样当它的子元素出厂时都会具有这种动画效果,
定义:
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="0.5" android:animationOrder="normal" android:animation="@anim/anim_item" > </layoutAnimation>
android:delay 表示开始动画的时间延迟,比如子元素入场动画的时间周期为300ms,那么0.5表示每个质子元素都延迟150ms才能播放入场动画,第一个元素延时150ms,第二个延迟 300ms依次类推
android:animatorOrder 有三种选项 normal、reverse和 random,其中normal表示顺序显示,即排在前面的子元素最先开始播放入场动画,reverse表示逆向显示,即排在后面的子元素开始播放动画,random则是随机。
在xml中使用:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layoutAnimation="@anim/anim_layout" >
在java中使用:
LinearLayout root =(LinearLayout) findViewById(R.id.root); Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_item); LayoutAnimationController controller = new LayoutAnimationController(animation); controller.setDelay(0.5f); controller.setOrder(LayoutAnimationController.ORDER_NORMAL); root.setLayoutAnimation(controller);
b、Activity的切换效果
Activity有默认的切换效果,但是这个效果我们可以自己定义的,主要用到OverPendingTransition(int enterAnim,int exitAnim)这个方法,这个方法必须在startActivity(Intent)后者finish()之后被调用才能生效,它的参数含义如下:
enterAnim——–Activity被打开时,所需的动画资源id
exitAnim———Activity被暂停时,所需的动画资源id.
使用:
Intent intent1 = new Intent(HomeActivity.this, AnimationActivity.class); startActivity(intent1); overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);
@Override public void finish() { super.finish(); overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories