ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Introduction to Physics-based animations in Android
    프로그래밍/Android 2017. 9. 6. 01:47
    반응형

    Dynamic-animation은 Support Library 중의 하나이다.

    Dynamic-animation support Library는 Support Library 버전 25.3.0 이상부터 사용할 수 있다. 

    build.gradle 파일에 아래와 같이 추가하면 된다. 

    compile "com.android.support:support-dynamic-animation:25.3.0"


    기존 애니매이션 특징

    기존 애니메이션은 start value, end value, duration, interpolator, velocity 값을 고정으로 사용한다.

    그래서 이동 중에 Target Value가 변화하면 속도(Velocity)가 0로 떨어져 매우 어색해보인다.

    Velocity가 0로 떨어지는 이유는 진행중인 애니메이션이 취소되고 새로 시작하기 때문이다.

    기존의 Velocity는 사라지고 새로운 Velocity는 애니메이션이 시작될 때 다시 변화하기 시작한다.

    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="2000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="800"
        android:toYDelta="1000" 
        >
    </translate>
    
     Animation anim = AnimationUtils.loadAnimation
                            (getApplicationContext(), 
                            R.anim.translate_anim);   
                    iv.startAnimation(anim);
    



    특징

    An animation is driven by force.

    기존 애니메이션 동작은 고정된 Duration과 Animation 값의 변화로 동작하였다. Physics-based 애니메이션은 이런 고정된 값을 입력할 필요가 없다.

    Pixel, 혹은 프레임 간의 이동을 그릴 때, 서로 다른 값의 transition에서 지속적으로 속도를 유지함으로서 가속도를 유지한다. 


    물체의 존재하는 속력에 의해서 애니메이션의 행동이 결정된다. 즉, Target Value가 변화했을 때, Velocity가 함께 변화한다.

    애니메이션은 힘(Force, 크기, 방향에 의해서 좌우됨)에 의해 움직이고, 이 힘은 가속과 감속을 결정한다. 

    애니메이션 값과 속력은 각각의 프레임을 업데이트한다. 

    Force가 평행에 도달하면 애니메이션이 멈춘다. 


    SpringAnimation anim = new SpringAnimation(view, SpringAnimation.TRANSLATION_X, FINAL_Y_POSITION);
    anim.getSpring().setDampingRatio(DAMPING_RATIO_HIGH_BOUNCY);
    anim.getSpring().setStiffness(STIFFNESS_VERY_LOW);
    anim.start();
    


    TRANSLATION_XTRANSLATION_YTRANSLATION_Z 는 View가 마지막 도달하고자하는 방향으로 0~ 좌표와 함께 적어준다. 


    SpringAnimation은 SpringForce에 의해 좌우되며 아래 두가지 정도만 설정하면 된다.

    setDampingRatio 는 튕김정도로 XX_HIGH로 갈수록 스프링 애니매이션의 FINAL POSITION에 도달할 때, 탄성이  좋아진다. (1.0f~0.2f)

    setStiffness는 FINAL POSITION에 도달하기까지의 속도이며 _HIGH일수록 더 빨리 도달할 수 있다. (50f ~ 10,000f)

    이해가 잘 안된다면 11:40~ 부터 확인! - https://youtu.be/BNcODK-Ju0g


    https://developer.android.com/guide/topics/graphics/spring-animation.html

    예제 - https://github.com/calren/physicsBasedAnimation

    반응형
Designed by Tistory.