반응형
Easing functions
Easing functions specify the rate of change of a parameter over time.
Objects in real life don’t just start and stop instantly, and almost never move at a constant speed. When we open a drawer, we first move it quickly, and slow it down as it comes out. Drop something on the floor, and it will first accelerate downwards, and then bounce back up after hitting the floor.
This page helps you choose the right easing function.
즉, 애니메이션처럼 어떤 액션을 보여주고자 할 때, 그냥 선형적으로 움직이는 느낌이 아닌 다이나믹하게 움직이는 듯한 모습을 보여주기 위한 방법을 Easing function이라고 한다.
t : current time
b : start value
c : change in value
d : duration
// simple linear tweening - no easing, no acceleration
Math.linearTween = function (t, b, c, d) {
return c*t/d + b;
};
// quadratic easing in - accelerating from zero velocity
Math.easeInQuad = function (t, b, c, d) {
t /= d;
return c*t*t + b;
};
// quadratic easing out - decelerating to zero velocity
Math.easeOutQuad = function (t, b, c, d) {
t /= d;
return -c * t*(t-2) + b;
};
// quadratic easing in/out - acceleration until halfway, then deceleration
Math.easeInOutQuad = function (t, b, c, d) {
t /= d/2;
if (t < 1) return c/2*t*t + b;
t--;
return -c/2 * (t*(t-2) - 1) + b;
};
// cubic easing in - accelerating from zero velocity
Math.easeInCubic = function (t, b, c, d) {
t /= d;
return c*t*t*t + b;
};
// cubic easing out - decelerating to zero velocity
Math.easeOutCubic = function (t, b, c, d) {
t /= d;
t--;
return c*(t*t*t + 1) + b;
};
// cubic easing in/out - acceleration until halfway, then deceleration
Math.easeInOutCubic = function (t, b, c, d) {
t /= d/2;
if (t < 1) return c/2*t*t*t + b;
t -= 2;
return c/2*(t*t*t + 2) + b;
};
// quartic easing in - accelerating from zero velocity
Math.easeInQuart = function (t, b, c, d) {
t /= d;
return c*t*t*t*t + b;
};
// quartic easing out - decelerating to zero velocity
Math.easeOutQuart = function (t, b, c, d) {
t /= d;
t--;
return -c * (t*t*t*t - 1) + b;
};
// quartic easing in/out - acceleration until halfway, then deceleration
Math.easeInOutQuart = function (t, b, c, d) {
t /= d/2;
if (t < 1) return c/2*t*t*t*t + b;
t -= 2;
return -c/2 * (t*t*t*t - 2) + b;
};
// quintic easing in - accelerating from zero velocity
Math.easeInQuint = function (t, b, c, d) {
t /= d;
return c*t*t*t*t*t + b;
};
// quintic easing out - decelerating to zero velocity
Math.easeOutQuint = function (t, b, c, d) {
t /= d;
t--;
return c*(t*t*t*t*t + 1) + b;
};
// quintic easing in/out - acceleration until halfway, then deceleration
Math.easeInOutQuint = function (t, b, c, d) {
t /= d/2;
if (t < 1) return c/2*t*t*t*t*t + b;
t -= 2;
return c/2*(t*t*t*t*t + 2) + b;
};
// sinusoidal easing in - accelerating from zero velocity
Math.easeInSine = function (t, b, c, d) {
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
};
// sinusoidal easing out - decelerating to zero velocity
Math.easeOutSine = function (t, b, c, d) {
return c * Math.sin(t/d * (Math.PI/2)) + b;
};
// sinusoidal easing in/out - accelerating until halfway, then decelerating
Math.easeInOutSine = function (t, b, c, d) {
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
};
// exponential easing in - accelerating from zero velocity
Math.easeInExpo = function (t, b, c, d) {
return c * Math.pow( 2, 10 * (t/d - 1) ) + b;
};
// exponential easing out - decelerating to zero velocity
Math.easeOutExpo = function (t, b, c, d) {
return c * ( -Math.pow( 2, -10 * t/d ) + 1 ) + b;
};
// exponential easing in/out - accelerating until halfway, then decelerating
Math.easeInOutExpo = function (t, b, c, d) {
t /= d/2;
if (t < 1) return c/2 * Math.pow( 2, 10 * (t - 1) ) + b;
t--;
return c/2 * ( -Math.pow( 2, -10 * t) + 2 ) + b;
};
// circular easing in - accelerating from zero velocity
Math.easeInCirc = function (t, b, c, d) {
t /= d;
return -c * (Math.sqrt(1 - t*t) - 1) + b;
};
// circular easing out - decelerating to zero velocity
Math.easeOutCirc = function (t, b, c, d) {
t /= d;
t--;
return c * Math.sqrt(1 - t*t) + b;
};
// circular easing in/out - acceleration until halfway, then deceleration
Math.easeInOutCirc = function (t, b, c, d) {
t /= d/2;
if (t < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
t -= 2;
return c/2 * (Math.sqrt(1 - t*t) + 1) + b;
};
http://gizma.com/easing/#quint2
반응형
'Basic > Android' 카테고리의 다른 글
외부 모듈 import 및 so 파일 추가 (0) | 2019.12.19 |
---|---|
[Android] This Handler class should be static or leaks might occur 해결 방법 (0) | 2019.12.15 |
다각형 영역으로 이미지 자르기 (0) | 2019.11.19 |
Android 해상도와 dpi, px, dp, dip, sp의 관계 (0) | 2019.11.17 |
Android View의 상대 좌표 (0) | 2019.11.17 |