티스토리 뷰

어플을 개발하다보면,

애니메이션을 사용할 일이 의외로 많다.(UI 디자이너들이 좋아한다 ㅜㅜ)


그냥 애니메이션은 Listener가 있기 때문에 별다른 어려움이 없었으나

FrameAnimation의 경우 골머리가 아팠다.


특히 FrameAnimation이 여러변 변경 되어야할 경우들이 있는데,

변경 타이밍 잡기가 까다로웠다.


최근에는 Lottie 라이브러리를 사용하면서,

해당 클래스는 버려졌지만, 아까워서 남겨놔야겠다 ㅜㅜ

FrameAnimation이 한 사이클 돌 때마다 콜백으로 전달해준다.


public class CallBackAnimationDrawable extends AnimationDrawable {
public interface OnAnimDrawableCallback {
void onAnimationOneShotFinished();
}

private OnAnimDrawableCallback adListener;
private Handler timingHandler = null;

public CallBackAnimationDrawable(AnimationDrawable aniDrawable) {
for (int i = 0; i < aniDrawable.getNumberOfFrames(); i++) {
this.addFrame(aniDrawable.getFrame(i), aniDrawable.getDuration(i));
}
timingHandler = new Handler(Looper.getMainLooper());
}

public void setAnimDrawableListener( OnAnimDrawableCallback callback ) {
this.adListener = callback;
}


public OnAnimDrawableCallback getAnimDrawableListener() {
return adListener;
}

@Override
public boolean selectDrawable(int index) {
if( index != 0 && index == getNumberOfFrames()-1 ) {
timingHandler.postDelayed(resultListenerRunnable, this.getDuration(index));
}
return super.selectDrawable(index);
}

private Runnable resultListenerRunnable = new Runnable() {
@Override
public void run() {
if( adListener != null ) adListener.onAnimationOneShotFinished();
}
};
}


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함