补间动画(Tween Animation)
a. 渐变动画支持四种类型:平移(Translate)、旋转(Rotate)、缩放(Scale)、不透明度(Alpha)。
b. 只是显示的位置变动,View的实际位置未改变,表现为View移动到其他地方,点击事件仍在原处才能响应。
c. 组合使用步骤较复杂。
d. View Animation 也是指此动画。
帧动画(Frame Animation)
a. 用于生成连续的Gif效果图。
b. DrawableAnimation也是指此动画。
属性动画(Property Animation)
a. 支持对所有View能更新的属性的动画(需要属性的setXxx()和getXxx())。
b. 更改的是View实际的属性,所以不会影响其在动画执行后所在位置的正常使用。
逐帧动画 frame_anim.xml
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <!-- android:oneshot="false" 表示不循环播放 --> <item android:drawable="@drawable/ni" android:duration="500"/> <item android:drawable="@drawable/hao" android:duration="500"/> <item android:drawable="@drawable/huan" android:duration="500"/> <item android:drawable="@drawable/yin" android:duration="500"/> <item android:drawable="@drawable/lai" android:duration="500"/> <item android:drawable="@drawable/dao" android:duration="500"/> <item android:drawable="@drawable/wo" android:duration="500"/> <item android:drawable="@drawable/de" android:duration="500"/> <item android:drawable="@drawable/bo" android:duration="500"/> <item android:drawable="@drawable/ke" android:duration="500"/> </animation-list>
java中代码
//anim的backgroud="@anim/frame_anim" final ImageView anim = (ImageView) findViewById(R.id.anim); final AnimationDrawable animation = (AnimationDrawable) anim .getBackground(); animation.start(); animation.stop();
http://download.csdn.net/download/qq_26972449/9373567参考例子
补间动画 透明
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="1000" /> fromAlpha 属性为动画起始时透明度 toAlpha 属性为动画结束时透明度 0.0 表示完全透明 1.0 表示完全不透明 duration 属性为动画持续时间 时间以毫秒为单位
java代码
AnimationalphaAnimation=new AlphaAnimation(1, (float) 0.1); alphaAnimation.setDuration(3000);//设置动画持续时间为3秒 alphaAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置) imgShow.startAnimation(alphaAnimation); AnimationalphaAnimation2=AnimationUtils.loadAnimation(this, R.anim.alpha);//加载Xml文件中的动画 imgShow.startAnimation(alphaAnimation2);
旋转
<rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromDegrees="0" android:toDegrees="+350" android:pivotX="50%" android:pivotY="50%" android:duration="3000" /> <!-- rotate 旋转动画效果属性: interpolator 指定一个动画的插入器 accelerate_decelerate_interpolator 加速-减速动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速-动画插入器 fromDegrees 属性为动画起始时物件的角度 toDegrees 属性为动画结束时物件旋转的角度 可以大于360度 说明: 当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转) pivotX 属性为动画相对于物件的X坐标的开始位置 pivotY 属性为动画相对于物件的Y坐标的开始位置 说明: 以上两个属性值从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置 长整型值:duration 属性为动画持续时间 时间以毫秒为单位-->
java代码
AnimationrotateAnimation=new RotateAnimation(0, 45); rotateAnimation.setDuration(3000);//设置动画持续时间为3秒 rotateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置) imgShow.startAnimation(rotateAnimation); myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
缩放
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" > <!-- 尺寸伸缩动画效果scale 属性:interpolator 指定一个动画的插入器 accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速- 动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 浮点型值:fromXScale 属性为动画起始时X坐标上的伸缩尺寸 toXScale 属性为动画结束时X坐标上的伸缩尺寸 fromYScale 属性为动画起始时Y坐标上的伸缩尺寸 toYScale 属性为动画结束时Y坐标上的伸缩尺寸 startOffset 属性为从上次动画停多少时间开始执行下个动画 说明: 以上四种属性值 0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大 pivotX 属性为动画相对于物件的X坐标的开始位置 pivotY 属性为动画相对于物件的Y坐标的开始位置 说明: 以上两个属性值从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置 长整型值:duration 属性为动画持续时间 时间以毫秒为单位 布尔型值: fillAfter 属性当设置为true ,该动画转化在动画结束后被应用 --> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1" android:toXScale="1" android:fromYScale="0" android:toYScale="1" android:pivotX="0" android:pivotY="1" android:startOffset="1" android:duration="700" /> </set>
java 代码
Animationscale Animation=new ScaleAnimation(0.5f, 1.0f,1.0f, 1.0f); scaleAnimation.setDuration(2000);//设置动画持续时间为3秒 scaleAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置) scaleAnimation.setRepeatCount(3); imgShow.startAnimation(scaleAnimation); myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
移动
<?xml version="1.0" encoding="utf-8"?> <!-- translate 整型值: fromXDelta 属性为动画起始时X坐标上的位置 toXDelta 属性为动画结束时X坐标上的位置 fromYDelta 属性为动画起始时Y坐标上的位置 toYDelta 属性为动画结束时Y坐标上的位置 注意: 没有指定fromXType toXType from YType toYType 时候,默认是以自己为相对参照物长整型值: duration 属性为动画持续时间 说明:时间以毫秒为单位--> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="10" android:duration="1000" android:interpolator="@anim/cycle_4" />
Java 代码
AnimationtranslateAnimation=new TranslateAnimation(0, 100, 0, 0); translateAnimation.setDuration(3000);//设置动画持续时间为3秒 translateAnimation.setInterpolator(this, android.R.anim.cycle_interpolator);//设置动画插入器 translateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置) imgShow.startAnimation(translateAnimation);
多个动画组合
AnimationSet animationSet = new AnimationSet(true); AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0); RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f); rotateAnimation.setDuration(1000); animationSet.addAnimation(rotateAnimation); animationSet.addAnimation(alphaAnimation); image.startAnimation(animationSet);
属性动画
相关的类
ObjectAnimator 动画的执行类,后面详细介绍
ValueAnimator 动画的执行类,后面详细介绍
AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。
AnimatorInflater 用户加载属性动画的xml文件
TypeEvaluator 类型估值,主要用于设置动画操作属性的值。
总的来说,属性动画就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。
ObjectAnimator// .ofFloat(view, "rotationX", 0.0F, 360.0F)// x轴旋转 .setDuration(500)// .start(); //rotationY Y轴旋转 //rotation 旋转 //translationX X轴移动 //translationY Y轴移动 //scaleX X轴缩放 //scaleY Y轴缩放 ObjectAnimator animator1 = ObjectAnimator.ofFloat(textView, "scaleX", 0F, 1F,0F,2F); //alpha 透明度 ObjectAnimator animator1 = ObjectAnimator.ofFloat(textView, "alpha", 0F, 1F,0F);
多个动画
//同步动画设计 PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationX", 0, 360F); PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationY", 0, 360F); PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("rotation", 0, 360F); ObjectAnimator.ofPropertyValuesHolder(imageView, p1, p2 ,p3).setDuration(1000).start(); //通过AnimatiorSet来设计同步执行的多个属性动画 ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 360F);//X轴平移旋转 ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 360F);//Y轴平移旋转 ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F);//360度旋转 AnimatorSet set = new AnimatorSet(); set.playSequentially(animator1, animator2, animator3);//分步执行 set.playTogether(animator1, animator2, animator3);//同步执行 //属性动画的执行顺序控制 set.play(animator3).with(animator1); //同步 set.play(animator2).after(animator3); //异步 set.setDuration(1000); set.start();
属性动画更多高级用法
http://blog.csdn.net/guolin_blog/article/details/43536355
http://blog.csdn.net/guolin_blog/article/details/43816093