Android官方ApiDemo中animation部分代码要点整理


ApiDemo动画代码技术点整理

ApiDemo中com.example.android.apis.animation包内有10多个demo源码,主要是最新的属性动画,少量补间动画,还有布局动画及最新的Transitions框架,以下是这个包中各个demo源码的要点整理。在这个包之外还有很多动画,多是补间动画及相关布局动画,代码比较分散,搜索关键字是“animation”和布局相关的“Transition”等

AnimationCloning
     clone
     AnimatorSet,也可以clone

AnimationLoading
     XML定义animator
          ValueAnimator和ObjectAnimator的XML定义不同,后者要提供属性名

AnimationSeeking
     bounceAnim.setCurrentPlayTime(seekTime);设置当前时间位置

AnimatorEvents
     event:start/cancel/repeat/end
     同一个对象,两个动画同时播放?说明动画是UI线程之外的异步线程?

BouncingBalls
            AnimatorSet bouncer = new AnimatorSet();
            bouncer.play(bounceAnim).before(squashAnim1);
            bouncer.play(squashAnim1).with(squashAnim2);
            bouncer.play(squashAnim1).with(stretchAnim1);
            bouncer.play(squashAnim1).with(stretchAnim2);
            bouncer.play(bounceBackAnim).after(stretchAnim2);

     要点是多个动画的播放次序、依赖关系
     参考

CustomEvaluator
         public class XYEvaluator implements TypeEvaluator {
        public Object evaluate(float fraction, Object startValue, Object endValue) {
            XYHolder startXY = (XYHolder) startValue;
            XYHolder endXY = (XYHolder) endValue;
            return new XYHolder(startXY.getX() + fraction * (endXY.getX() - startXY.getX()),
                    startXY.getY() + fraction * (endXY.getY() - startXY.getY()));
        }
    }

LayoutAnimationsByDefault
     使用系统缺省动画,无需再编写代码
          android:animateLayoutChanges="true"

FixedGridLayout
     最简的自定义布局
     可以作为模板
     自定义布局的复杂度取决于要支持多少布局参数,如果很少,或如此例是Fixed的,那么自定义布局很简单

LayoutAnimations
     布局动画控制器android.animation.LayoutTransition
     增加和删除两种事件,导致4种动画
     KeyFrame
     PropertyValuesHolder及对应的构造方法ObjectAnimator.ofPropertyValuesHolder
     可变参数导致动画效果
     被影响的child很多,但只设置一个动画,其他拷贝

LayoutAnimationsHideShow
     似乎没有新东西

ListFlipper
     绕Y轴(rotationY)或X轴旋转,而不是绕Z轴(rotation)旋转
     3D到平面的投影系统
     将View看成三维空间中的一个平面

MultiPropertyAnimation
     带光影的ball的画法

ReversingAnimation
     带光影的ball的画法

Rotate3dAnimation
      public   class   Rotate3dAnimation   extends   Animation {
     覆盖applyTransformation(),在其中实现自定义投影及动画
          需要查询Camera和Matrix资料才能看明白
     Camera ---- 照相机、投影机?
          A camera instance can be used to compute 3D transformations and
          generate a matrix that can be applied, for instance, on a Canvas.
     Matrix类
     补间动画
     可能是补间动画的操作
          mContainer.startAnimation(rotation);

Transition3d
     在一个动画之后接另一个动画,通过container.post()来实现。注意post的参数是一个Runnable
            private   final   class   DisplayNextView   implements   Animation.AnimationListener {
           public   void   onAnimationEnd (Animation animation) {
              mContainer .post( new   SwapViews( mPosition ));
        }
    }

Transitions
     Scene
     TransitionManager
     注,Transitions框架需要在Android 4.4以后版本中运行





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值