안드로이드에서 Layout이나 View에 적용하여 여러가지 애니메이션 효과를 낼 수 있다.
다음은 애니메이션 예제 코드이다.
// 해당 activity 이전 activity에서 scrollview에 대한 left, top, width, height 값을 intent로 넘겨받아서 아래와 같이 설정해준다.
if(savedInstanceState == null)
{
ViewTreeObserver observer = scrollView.getViewTreeObserver();
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
scrollView.getViewTreeObserver().removeOnPreDrawListener(this);
int[] screenLocation = new int[2];
scrollView.getLocationOnScreen(screenLocation);
leftDelta = left - screenLocation[0];
topDelta = top - screenLocation[1];
widthScale = (float) width / scrollView.getWidth();
heightScale = (float) height / scrollView.getHeight();
Log.e("scrollview", "" + heightScale);
runEnterAnimation();
return true;
}
});
}
public void runEnterAnimation()
{
final long duration = (long) 300;
scrollView.setPivotX(0); // View가 회전하고 확장할 수 있는 기준 점을 설정하는 함수
scrollView.setPivotY(0);
scrollView.setScaleY(heightScale);
scrollView.setScaleX(widthScale);
scrollView.setTranslationX(leftDelta);
scrollView.setTranslationY(topDelta);
layout.setTranslationX(layout.getWidth());
layout.setPivotX(0);
layout.setPivotY(0);
scrollView.animate().setDuration(duration).scaleX(1).scaleY(1)
.translationX(0).translationY(0)
.setInterpolator(new AccelerateInterpolator(1)).withEndAction(new Runnable() { // Accelerate 가속 형태 ( 지수 함수 형태 )
@Override
public void run() {
layout.animate().setDuration(duration-100).scaleX(1).scaleY(1)
.translationX(0)
.setInterpolator(new DecelerateInterpolator(1)).start(); // Decelerate 감속 곡선 형태 ( Log 함수 형태 )
}
});
// Fade in the black background
ObjectAnimator bgAnim = ObjectAnimator.ofInt(mBackground, "alpha", 0, 255);
// mBackground라는 Object내에 존재하는 alpha값을 0에서 255까지 변경하는 Animation
bgAnim.setDuration(duration);
bgAnim.start();
topLevelLayout.setBackgroundColor(getResources().getColor(R.color.background));
}
// 해당 activity 이전 activity에서 scrollview에 대한 left, top, width, height 값을 intent로 넘겨받아서 아래와 같이 설정해준다.
if(savedInstanceState == null)
{
ViewTreeObserver observer = scrollView.getViewTreeObserver();
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
scrollView.getViewTreeObserver().removeOnPreDrawListener(this);
int[] screenLocation = new int[2];
scrollView.getLocationOnScreen(screenLocation);
leftDelta = left - screenLocation[0];
topDelta = top - screenLocation[1];
widthScale = (float) width / scrollView.getWidth();
heightScale = (float) height / scrollView.getHeight();
Log.e("scrollview", "" + heightScale);
runEnterAnimation();
return true;
}
});
}
public void runEnterAnimation()
{
final long duration = (long) 300;
scrollView.setPivotX(0); // View가 회전하고 확장할 수 있는 기준 점을 설정하는 함수
scrollView.setPivotY(0);
scrollView.setScaleY(heightScale);
scrollView.setScaleX(widthScale);
scrollView.setTranslationX(leftDelta);
scrollView.setTranslationY(topDelta);
layout.setTranslationX(layout.getWidth());
layout.setPivotX(0);
layout.setPivotY(0);
scrollView.animate().setDuration(duration).scaleX(1).scaleY(1)
.translationX(0).translationY(0)
.setInterpolator(new AccelerateInterpolator(1)).withEndAction(new Runnable() { // Accelerate 가속 형태 ( 지수 함수 형태 )
@Override
public void run() {
layout.animate().setDuration(duration-100).scaleX(1).scaleY(1)
.translationX(0)
.setInterpolator(new DecelerateInterpolator(1)).start(); // Decelerate 감속 곡선 형태 ( Log 함수 형태 )
}
});
// Fade in the black background
ObjectAnimator bgAnim = ObjectAnimator.ofInt(mBackground, "alpha", 0, 255);
// mBackground라는 Object내에 존재하는 alpha값을 0에서 255까지 변경하는 Animation
bgAnim.setDuration(duration);
bgAnim.start();
topLevelLayout.setBackgroundColor(getResources().getColor(R.color.background));
}
다음은 애니메이션에 대한 설명 동영상이다.