Androidアニメーションの簡単な理解

3975 ワード

公式サイト
参考二
Androidアニメーションは2つのブロックに分かれています.
  • Property Animation(プロパティアニメーション)
  • ViewAnimation(ビューアニメーション)は、Tween animationとFrame animation
  • に分けられます.
    Property AnimationとView Animationの違い
    View Animationは主にViewのようなオブジェクトに作用します.ビューのscale、rotationなどを修正するしかなく、背景色、位置の実際の情報は含まれていません.例えば、ViewAnimationを使用してButtonの移動を行い、移動中にボタンの実際のクリック位置はボタンの移動や圧縮に伴って変化することなく開始位置にある.
    Property Animationは、上記の状況(ビュークラスでないオブジェクトも含む)を実質的に変えることができます.はっきり言って、View Animationは View で、実は です.
    APIレベル
    主に3種類に分けられます:Animator、Evalutor、Interpolater;
    Animator:アニメーションの基礎とフレームワークを作成して、インタフェースで、ObjectAnimatorとValueAnimatorの実現があって、主にpropertyの値を計算してと値を具体的なobjectのpropertyに伝達します
    Evalutor:Animatorが提供する値の範囲と時間に基づいて、Propertyの値を計算します.
    Interpolater:主に単位時間内の値の変化量を計算するために用いられ、加速度の概念に似ている.
    プロパティアニメーション
    主な要素またはクラス:
    Elapsed fraction:時間因子(主に時間の値変化を計算するために用いられる)
    interpolated fraction:補間係数(主にpropertyの値変化量を計算するために使用され、主にTimeInterpolatorからの伝達)
    VauleAnimator:主要なクラス、アニメーションの時間を監視して、属性の値
    TimeInterpolator:挿入器(改ざん者)使用時間因子算出 TypeEvaluator:補間係数を使用してpropertyの値を計算する
    xml方式、animator.setTarget() animator.start()を使用
    AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.anim.property_animator);
    set.setTarget(myObject);
    set.start();
    

    ViewAnimationで使用されるview.startAnimation ObjectAnimatorはVauleAnimatorのサブクラスである.
    参考android api simpleの下にあるAnimationCloning.JAvaのコード:
      private void createAnimation() {
            if (animation == null) {
                    //     ,      “y”      
                ObjectAnimator anim1 = ObjectAnimator.ofFloat(balls.get(0), "y",
                        0f, getHeight() - balls.get(0).getHeight()).setDuration(500);
                ObjectAnimator anim2 = anim1.clone();
                anim2.setTarget(balls.get(1));
                //           ,     onAnimationUpdate  
                anim1.addUpdateListener(this);
    
                ShapeHolder ball2 = balls.get(2);
                ObjectAnimator animDown = ObjectAnimator.ofFloat(ball2, "y",
                        0f, getHeight() - ball2.getHeight()).setDuration(500);
    
                //                 
                animDown.setInterpolator(new AccelerateInterpolator());
                ObjectAnimator animUp = ObjectAnimator.ofFloat(ball2, "y",
                        getHeight() - ball2.getHeight(), 0f).setDuration(500);
                animUp.setInterpolator(new DecelerateInterpolator());
                //     
                AnimatorSet s1 = new AnimatorSet();
                s1.playSequentially(animDown, animUp);
                animDown.addUpdateListener(this);
                animUp.addUpdateListener(this);
                AnimatorSet s2 = (AnimatorSet) s1.clone();
                s2.setTarget(balls.get(3));
    
                animation = new AnimatorSet();
                //        :    
                animation.playTogether(anim1, anim2, s1);
                //        :     ,     
                animation.playSequentially(s1, s2);
            }
      ......
    
      public void onAnimationUpdate(ValueAnimator animation) {
            //   UI 
            invalidate();
        }
    

    その他の知識点
  • アニメーションには集合があり、一緒に実行することができ、順番に実行することができ、実行に相互に影響を与える.例えば、誰が先に
  • を実行するか.
  • アニメーションの開始、終了、繰り返し、キャンセル、更新はすべて傍受することができます
  • GroupViewレイアウトアニメーションは、viewの追加と削除などの
  • のサブviewの表示と消失などのLayoutTransitionによって制御されます.
  • TypeEvalutorは、Objectを変更する必要があるpropertyがint、floatとは限らない場合があるため、これらの基本タイプはStringタイプである可能性もあります.
  • Keyframe:フレームアニメーションに似ています.具体的な時間、具体的な値のペア(keyに似ているのは時間のmapです).PropertyValuesHolder.ofKeyframeと組み合わせて
  • を用いる.
    ビューアニメーション
  • xml方式で、startAnimation
    ImageView spaceshipImage = (ImageView)findViewById(R.id.spaceshipImage);
    Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    spaceshipImage.startAnimation(hyperspaceJumpAnimation);
    
  • を用いる.