zoukankan      html  css  js  c++  java
  • 第七章:Android动画深入分析

        7.1 View动画

            View动画的作用对象是View,它支持四种动画效果,分别是平移动画,缩放动画,旋转动画和透明动画.

            帧动画也属于View动画,但是帧动画的表现形式和上面的四种变换效果不太一样.

          7.1.1 View动画的种类

            对应着Animation的四个子类:

              TranslateAnimation(位移动画),ScaleAnimation(缩放动画),RotateAnimation(旋转动画),AlphaAnimation(透明度动画)

            两种实现方式:

              第一种,定义xml文件,使用<alpha>/<scale>/<translate>/<rotate>四种标签定义的动画

              使用:

    Button mButton = (Button)findViewById(R.id.button1);
    Animation animation = AnimationUtils.loadAnimation(this, R.anim.animation_test);
    mButton.startAnimation(animation);

              第二种,通过代码的方式启动动画

    AlphaAnimation alphaAnimation = new AlphaAnimation(0,1);
    alphaAnimation.setDuration(300);
    mButton.startAnimation(alphaAnimation);

          7.1.2 自定义View动画

            自定义动画挺麻烦的,首先需要派生一种新动画只需要继承Animation这个抽象类,然后重写它的initialize和Transformation方法.

            在initialize方法中做一些初始化工作,在applyTranslation中进行相应的矩阵变换(很多时候采用Camera来简化矩阵变换的过程)

          7.1.3 帧动画

            是顺序播放一组预先定义好的图片,类似于电影播放.

            系统提供了另一个类AnimationDrawable来使用帧动画.

            首先需要通过XML来定义一个AnimationDrawable

            <animation-list>标签内部定义多个<item>

            定一个好之后,座位View的背景并通过Drawable来播放即可.

        

        7.2 View动画的特殊使用场景

            7.2.1 LayoutAnimation

              作用于ViewGroup,为ViewGroup指定一个动画,这样当它的子元素出场时都会具有这种动画效果.

              <layoutAnimation>标签

              还可以通过LayoutAnimationController来实现

            7.2.2 Activity的切换效果

              主要用到overridePendingTransition(int enterAnim, intexitAnim)这个方法,这个方法必须在startActivity(intent)或者finish()之后被调用才能生效.

        

        7.3 属性动画

            7.3.1 使用属性动画

              属性动画可以对任意对象的属性进行动画而不仅仅是View,动画默认时间间隔300ms,默认帧率10ms/帧.

              达到的效果:在一个时间间隔内完成对象从一个属性值到另一个属性值的改变.

              使用开源动画库nineoldandroids来兼容以前的版本

          1. 改变一个对象的translationY属性,让其沿着Y轴平移

                   ObjectAnimator.ofFloat(myObject, "translationY", 100).start();

                  2. 改变一个对象的背景色属性,典型的情形时改变View的背景色

                   ValueAnimator colorAnim = ObjectAnimator.ofInt(this, "backgroundColor", /*Red*/0xFFFF8080, /*Blue*/0x8080FF);

                   colorAnim.setDuration(3000);

                   colorAnim.setEvaluator(new ArgbEvaluator());

                   colorAnim.setRepeatCount(10);

                   colorAnim.setRepeatMode(ValueAnimator,REVERSE);

                   colorAnim.start();

                3. 动画集合

                   AnimatorSet set = new AnimatorSet();

                   set.playTogether(anim1, anim2, anim3);

                   set.setDuration(1000).start();

            7.3.2 理解插值器和估值器

              TimeInterpolator(时间插值器),作用是根据时间流逝的百分比来计算出当前属性值改变的百分比

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

            7.3.3 属性动画的监听器

              属性动画提供了监听器用于监听动画的播放过程,主要如下两个接口:

                AnimatorListener和AnimatorListener.

              AnimatorListener用来监听动画的开始,结束,取消以及重复播放.

              AnimatorUpdateListener会监听整个动画过程,动画是由许多帧组成的,没播放一帧,onAnimationUpdate就会被调用一次.

            7.3.4 对任意属性做动画

              属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次去调用set方法,每次传递给set方法的值都不一样.

              (1)object必须要提供setAbc方法,如果动画的时候没有传递初始值,那么还要提供getAbc方法.

              (2)object的setAbc对属性abc所做的改变必须能够通过某种方法反应出来,比如会带来UI的改变之类的

            7.3.5 属性动画的工作原理

              属性动画要求动画作用的对象提供该属性的set方法,属性动画根据传递的该属性的初始值和最终值,以动画的效果多次去调用set方法.

              在ObjectAnimator的start方法:

                首先会判断如果当前动画,等待的动画(Pending)和延迟的动画(Delay)中有和当前动画相同的动画,那么就把相同的动画给取消掉,再接着就调用父类的super.start()方法.

              在ValueAnimator中的start方法:

                属性动画需要运行在右Looper的线程中.最终会调用AnimationHandler的start()方法,这个AnimationHandler不是Handler,而是一个Runnable.

  • 相关阅读:
    hibernate中HQL多对多的查询
    Georgia Tech- 新的篇章
    吴军《智能时代》读书笔记
    P5项目完成记录
    Codewar python训练题全记录——持续更新
    优达学城纳米学位P5项目知识点总结——github使用
    优达学城数据分析师纳米学位——P5项目知识点整理贝叶斯规则
    优达学城数据分析师纳米学位——P5项目知识点整理机器学习基本术语
    P3-SQL 学习笔记
    HTML+CSS 学习笔记
  • 原文地址:https://www.cnblogs.com/JingQ/p/6184413.html
Copyright © 2011-2022 走看看