帧动画

Frame Animation是顺序播放事先做好的图像,跟电影类似。不同于animation package,Android SDK提供了另外一个类AnimationDrawable来定义使用Frame Animation。
利用xml文件实现:res/drawable-hdpi/frame.xml:

<?xml version="1.0" encoding="utf-8"?>
<animation-listxmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true"><item android:drawable="@drawable/p1" android:duration="1000"/><item android:drawable="@drawable/p2" android:duration="1000"/><item android:drawable="@drawable/p3" android:duration="1000"/>
</animation-list>
  • 使用帧动画
AnimationDrawable anim = (AnimationDrawable)getResources().
getDrawable(R.drawable.frame);
textWidget = (TextView)findViewById(R.id.text_widget);
textWidget.setText("背景渐变动画效果");
textWidget.setBackgroundDrawable(anim);
anim.start();

TweeAnimation 补间动画

只可以改变两个关键帧之间的透明度,旋转,缩放,位移四个变化

AlphaAnimation
RotateAnimation
ScaleAnimation
TranslateAnimation

1、 设置动画的资源文件

  • 补间动画的资源文件
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"android:duration="2000"android:fromXScale="1.0"android:fromYScale="1.0"android:pivotX="10%"android:pivotY="10%"android:repeatCount="3"android:repeatMode="restart"android:toXScale="0.5"android:toYScale="2.0"><!--  android:repeatMode="reverse"android:repeatCount="5"--><!--缩放动画  repeatCount重复字数,指的完成首次后再重复几次   repeatMode="reverse" reverse指的是按照动画的逆序再回来-->
</scale>
animation=AnimationUtils.loadAnimation(this, R.anim.anim_1);//加载动画资源
btn.startAnimation(animation);//启动动画

2、 直接在代码中设置动画

 RotateAnimation animation = new RotateAnimation(0, 2700);//创建动画animation.setDuration(10000);//设置时长animation.setRepeatCount(5);//设置重复次数animation.setInterpolator(new AnticipateInterpolator());//设置插值器animation.setAnimationListener(this);//设置监听mButton1.startAnimation(animation);//启动动画

TimeInterpolator和TypeEvaluator

TimeInterpolator中文翻译为时间插值器,它的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比

系统预置的有LinearInterpolator(线性插值器:匀速动画)、AccelerateDecelerateInterpolator(加速减速插值器:动画两头慢中间快)和DecelerateInterpolator(减速插值器:动画越来越慢)等

TypeEvaluator的中文翻译为类型估值算法,它的作用是根据当前属性改变的百分比来计算改变后的属性值

系统预置的有IntEvaluator(针对整型属性)、FloatEvaluator(针对浮点型属性)和ArgbEvaluator(针对Color属性)

为补间动画添加插值器Interpolator

  • 几种插值器

    1. 越来越快 AccelerateInterpolator()
    2. 越来越慢 DecelerateInterpolator()
    3. 先快后慢 AccelerateDecelerateInterpolator()
    4. 先后退一小步然后向前加速 AnticipateInterpolator()
    5. 快速到达终点超出一小步然后回到终点 OvershootInterpolator()
    6. 到达终点超出一小步然后回到终点 AnticipateOvershootInterpolator()
    7. 弹球效果,弹几下回到终点 BounceInterpolator()
    8. 均匀速度 LinearInterpolator()

属性动画

ValueAnimation

属性动画的基类,ObjectAnimation是集成自该类。ValueAnimator.ofFloat()方法中传递的可变参数,使用监听方法onAnimationUpdate拿到动画变化的属性值,再去对需要设置动画的属性赋值。

这个方法中的参数是一个可变参数

 ValueAnimator valueAnimator = ValueAnimator.ofFloat(100f, 300f);//创建一个属性动画,里面的两个参数,代表是动画的属性值valueAnimator.setDuration(2000);valueAnimator.setTarget(iv);//设置动画的目标valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {//设置更新的事件@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {float f = (float) valueAnimator.getAnimatedValue();//获取到当前动画执行到的值iv.setTranslationX(f);//将值作为位移的参数设置给控件,设置的相对参数iv.setX(f);//设置的是绝对参数}});valueAnimator.start();
ObjectAnimation

是ValueAnimation的子类,可以方便的对某个空间设置属性动画,该方法实际上是调用了改对象的set方法,只要是该控件具有该属性的set方法,就可以对其设置动画

  /*** 对textView的字体大小设置动画*/ObjectAnimator textSize = ObjectAnimator.ofFloat(tv, "textSize", 10, 30);textSize.setDuration(3000);
AnimatorSet

属性动画的集合

ObjectAnimator alpha = ObjectAnimator.ofFloat(tv, "alpha", 0.1f, 0.9f, 0.8f);
ObjectAnimator textSize = ObjectAnimator.ofFloat(tv, "textSize", 10, 30);
ObjectAnimator scaleX = ObjectAnimator.ofFloat(iv, "scaleX", 0.2f, 3.8f, 10f, 1.4f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(iv, "scaleY", 0.2f, 3.8f, 10f, 1.4f);
ObjectAnimator translationX = ObjectAnimator.ofFloat(iv, "translationX", 0, 300f);
//位移动画集合
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(5000);
animatorSet.play(alpha).with(translationX).before(textSize).after(scaleX);//自定义顺序
//animatorSet.playTogether(alpha,textSize,scaleX,scaleY,translationX);//所有的动画一起播放
//animatorSet.playSequentially(alpha,textSize,scaleX,scaleY,translationX);//将参数中的所有动画按照顺序一个一个播放
animatorSet.start();
PropertyValuesHolder

可以添加多个属性动画。

PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat("alpha", 0.1f, 0.9f, 1.0f);
PropertyValuesHolder textSize = PropertyValuesHolder.ofFloat("textSize", 10, 30);
PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX", 0.2f, 1.0f, 0.5f);
PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY", 0.2f, 1.0f, 0.5f);
ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(tv, alpha, textSize, scaleX, scaleY);objectAnimator.setDuration(5000);objectAnimator.start();
AnimatorInflate

通过xml文件定义属性动画

  • 加载属性动画资源的方法
 Animator set = AnimatorInflater.loadAnimator(this, R.animator.set);set.setTarget(tv);set.start();
  • 动画属性资源的实例
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"android:duration="3000"android:propertyName="translationX"android:valueFrom="0"android:valueTo="100dp"android:interpolator="@android:anim/anticipate_overshoot_interpolator"android:valueType="floatType">
</objectAnimator>
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"android:duration="3000"android:propertyName="scaleX"android:valueType="floatType"android:valueTo="3">
</objectAnimator>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:ordering="sequentially"><objectAnimatorandroid:propertyName="translationX"android:valueType="floatType"android:valueFrom="100px"android:duration="3000"android:interpolator="@android:anim/bounce_interpolator"android:valueTo="500px"/><objectAnimatorandroid:propertyName="scaleX"android:valueType="floatType"android:valueFrom="0.5"android:duration="5000"android:valueTo="3.0" /></set>
自定义的属性动画

如果想要做动画的属性在控件中不存在,那么就需要自定义的属性动画

 /*** 用于自定义修改控件的属性。textView的宽度是需要通过父控件获得的,所以需要通过自定义的MyObject获得*/MyObject myObject = new MyObject(tv);ObjectAnimator width = ObjectAnimator.ofInt(myObject, "width", 10, 100, 200, 300, 400, 1000);width.setDuration(5000);width.start();
  • 在定义的MyObj方法中获得textView 的宽度,在属性动画中调用
public class MyObject {private int width;private View view;public MyObject(View view) {this.view = view;}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;view.getLayoutParams().width = width;view.requestLayout();//请求重绘}
}
属性动画的另一种写法
Property property = Property.of(TextView.class, float.class, "textSize");//创建一个属性对象, 宿主类型 Tetxview, 参数值类型float, 参数名textSizeObjectAnimator objectAnimator = ObjectAnimator.ofFloat(tv, property, 10, 20, 30, 40, 50);objectAnimator.setDuration(5000);objectAnimator.start();

动画的常见使用场景

在ViewGroup中控制子元素的出场效果

1、 在anim文件夹中给ViewGroup设置动画

 <?xml version="1.0" encoding="utf-8"?><layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"android:animation="@anim/animation_item"android:animationOrder="normal"android:delay="0.2"><!--animation 给子控件设置动画资源--><!--animationOrder 是定义子控件的出场顺序--><!--delay 是定义两个子控件的动画延迟时间,0.2是延迟的倍数-->
</layoutAnimation>

2、 在anim文件夹中给子控件设置动画效果

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="500"android:interpolator="@android:interpolator/anticipate"android:shareInterpolator="true"><alphaandroid:fromAlpha="0"android:toAlpha="1"/><translateandroid:fromXDelta="500"android:toXDelta="0"/>
</set>
  • 这种方式也可在代码中通过LayoutAnimationController设置

Activity,Fragment的切换效果

1、 设置activity的场景转换动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="5000"android:interpolator="@android:interpolator/anticipate"android:shareInterpolator="true"><rotateandroid:fromDegrees="90"android:toDegrees="0"/><translateandroid:fromXDelta="500"android:toXDelta="0"/>
</set>

2、 启动activity的时候设置activity的转场动画,调用方法 overridePendingTransition,该方法必须在startActivity方法和finish方法之后调用才有效果

Intent intent = new Intent(this, SeconActivity.class);startActivity(intent);overridePendingTransition(R.anim.activity_enter, R.anim.activity_out);//分别设置进场和出场的动画效果

帧动画(FrameAnimation) 补间动画(TweeAnimation) 属性动画(ObjectAnimation)相关推荐

  1. android属性动画替换逐帧动画,Android 动画:逐帧动画,补间动画和属性动画

    1.三种动画的介绍 现在 Android 常用的动画有三种: 逐帧动画,补间动画和属性动画: FrameAnimation(逐帧动画):将多张图片组合起来进行播放,很多 App 的加载动画是采用这种方 ...

  2. 属性动画、帧动画、补间动画的介绍使用及对比

    属性动画.帧动画.补间动画的介绍使用及对比 版权声明:转载必须注明本文转自南轩的博客: http://blog.csdn.net/nanxuan521 在android开发中经常会碰到一些动画需求,其 ...

  3. 属性动画、帧动画、补间动画

    补间动画(Tween Animation) 1.补间动画的特性: a.渐变动画支持四种类型:平移(Translate).旋转(Rotate).缩放(Scale).不透明度 b. 只是显示的位置变动,V ...

  4. Android动画(帧动画、补间动画、属性动画)讲解

    Android动画(帧动画.补间动画.属性动画)讲解 首先我们来看看啥是帧动画.补间动画.属性动画. 介绍: 帧动画:是一种常见的动画形式(Frame By Frame),其原理是在"连续的 ...

  5. Android 三种动画 (帧动画 、补间动画、属性动画)

    1.帧动画 帧动画是依次展示n张静态图片,造成动画的错觉,类似看视频一样. 使用方式 在drawable目录下定义XML文件,根节点为animation-list,然后放入定义更好的图片 onesho ...

  6. Android动画之帧动画和补间动画

    Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...

  7. Android之帧动画与补间动画的使用

    前言 在日常开发中,我们有时候需要一些好看的动画效果,这时可以充分利用Android提供的这几种动画来实现, Android提供了3种类型的动画: 补间动画:补间动画可以应用于View,让你可以定义一 ...

  8. android 属性动画还原,属性动画和补间动画

    动画的分类 今天我们将会探讨动画的学习,Android的动画分成三类 1. Tween Animation(补间动画.视图动画):通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生的动画效果,即 ...

  9. Android逐帧动画和补间动画

    本篇博客来看一下Android中的逐帧动画和补间动画. 一.逐帧动画 逐帧动画也叫Drawable Animation. 在Android中实现逐帧动画,就是由设计师给出一系列状态不断变化的图片, 开 ...

最新文章

  1. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
  2. android Timer与TimerTask的相关操作
  3. Android 双击和手势的图片缩放
  4. Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)
  5. python写脚本入门-学习Python的教程?:python 脚本菜鸟教程
  6. 16.Linux/Unix 系统编程手册(上) -- 扩展属性
  7. eclipse实用编辑快捷键
  8. 朋友圈文字怎么到中间_怎样查看微信朋友圈访客记录
  9. 如何高效开发一款微信小程序
  10. Python学习视频收集
  11. Python求方阵的逆矩阵与求非方阵的伪逆矩阵
  12. 史上最全的贝塞尔曲线(Bezier)全解(三):贝塞尔曲线实现满屏爱心
  13. Java黑皮书编程练习题6.08(摄氏度和华氏度之间的转换)
  14. android11 rom,第一个Android 11的第三方ROM来了,适用于红米K20 Pro
  15. jquery ajax 出错得到错误信息的方式
  16. 图片去水印免费版-图片去水印免费版在线去水印
  17. 贾扬清官宣:从阿里离职,或将投身AI创业!
  18. HackerRank 题目目录
  19. 近地天体撞击地球原理的设想
  20. 日本語 紜本「えほん」中国語 3-4

热门文章

  1. 降雷皇(最长上升子序列数量)解题报告
  2. 关于广告和商业化,一点心里话
  3. java json 中文_java读取json数据中文乱码解决
  4. JS---如何避免用户在请求时“猛击”
  5. 开发者说:深度剖析开源分布式事务方案 Seata 的事务协调器
  6. 2017年由Unity员工打造的最爱
  7. UGUI - 中设置UISprite图片灰显方法
  8. 经管文本分析 | 金融学文本大数据挖掘方法与研究进展阅读笔记
  9. 编程语言摆地摊,我去逛了逛
  10. wireshark 分析理解DHCP流程