android ObjectAnimator的复杂关系动画

 

 

  • 关于复杂的属性关系来做动画就这么三种:
    • 使用PropertyValuesHolder来对多个属性同时做动画
      •               PropertyValuesHolder propertyValuesHolder = PropertyValuesHolder.ofFloat("alpha",0,1);
                            PropertyValuesHolder propertyValuesHolder1 = PropertyValuesHolder.ofFloat("scaleX",0,1);
                            PropertyValuesHolder propertyValuesHolder2 = PropertyValuesHolder.ofFloat("scaleY",0,1);
                            ObjectAnimator.ofPropertyValuesHolder(view,propertyValuesHolder,propertyValuesHolder1,propertyValuesHolder2).start();
        

          

    • 使用AnimatorSet来同时管理调配多个动画
      •                 ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "alpha", 0, 1);
                        ObjectAnimator animator2 = ObjectAnimator.ofFloat(view, "translationX", -200, 200);
                        ObjectAnimator animator3 = ObjectAnimator.ofFloat(view, "rotation", 0, 1080);
                        animator3.setDuration(1000);
        
                        AnimatorSet animatorSet = new AnimatorSet();
                        // 用 AnimatorSet 的方法来让三个动画协作执行
                        animatorSet.playSequentially(animator1,animator2);
                        animatorSet.playTogether(animator2,animator3);
                        // 要求 1: animator1 先执行,animator2 在 animator1 完成后立即开始
                        // 要求 2: animator2 和 animator3 同时开始
        
                        animatorSet.start();
        

          

    • PropertyValuesHolder的进阶使用:使用PropertyValuesHolder.ofKeyframe()来把一个属性拆分成多段,执行更加精细的属性动画
      • // 使用 Keyframe.ofFloat() 来为 view 的 progress 属性创建关键帧
                        // 初始帧:progress 为 0
                        // 时间进行到一般:progress 为 100
                        // 结束帧:progress 回落到 80
                        // 使用 PropertyValuesHolder.ofKeyframe() 来把关键帧拼接成一个完整的属性动画方案
                        // 使用 ObjectAnimator.ofPropertyValuesHolder() 来创建动画
        
            
              
                        Keyframe keyframe = Keyframe.ofFloat(0,0);
              
                        Keyframe keyframe1 = Keyframe.ofFloat(0.5f,100);
        
                        Keyframe keyframe2 = Keyframe.ofFloat(1,80);
                        PropertyValuesHolder holder = PropertyValuesHolder.ofKeyframe("progress",keyframe,keyframe1,keyframe2);
                        // 然后,用 ObjectAnimator.ofPropertyValuesHolder() 把三个属性合并,创建 Animator 然后执行
                        ObjectAnimator.ofPropertyValuesHolder(view,holder).setDuration(3*1000).start();
        

          

posted on 2018-09-07 13:59  endian11  阅读(954)  评论(0)    收藏  举报

导航