- 추가내용 2011.11.07 - 
 근래에 작성한 FrameAnimation에 관련된 다른 내용입니다.
 http://croute.me/496 


안드로이드에서 Frame Animation을 하기 위해서 AnimationDrawable이라는 객체를 이용합니다.

AnimationDrawable이라는 객체의 인스턴스를 직접 new로 생성해서 하는 방법도 있겠지만,
이미 프로젝트내에 사용할 이미지 리소스를 가지고 있는 경우라면

xml 로 drawable 파일을 생성해 병행하여 작업하는것이 편리합니다.
file_name.xml 이라는 파일을 만들어서 drawable에 저장해둔 후 JAVA와 XML에서 참조해서 사용합니다.

 xml 파일 저장위치  res/drawable/[file_name].xml 
 자바에서의 접근  R.drawable.file_name
 xml에서의 접근  @drawable.file_name




 AnimationDrawable (FrameAnimation) XML 작성




<animation-list>
android:oneshot
="true" 

: true / false
: 이 속성은 애니메이션이 한번만 실행될지 아니면 계속해서 반복될지를 결정합니다.
: oneshot이 true라면 한번만 실행되고, oneshot이 false라면 계속해서 반복합니다.


<item/>
android:drawable="@drawable/number_3"
: @drwable/file_name
: 이 속성은 프레임 애니메이션으로 보여줄 아이템 리소스(이미지 리소스)를 지정합니다.

android:duration="1000"
: int
: 이 속성은 아이템에 지정된 이미지를 얼마동안 화면에 보여줄지를 결정한다. 단위는 ms(밀리세컨드 1/1000초)입니다.




 Activity Code 작성

Activity는 예제를 편하게 사용하기 위해서 애니메이션을 두가지 방법으로 실행할 수 있도록 구현하였습니다.
1. 액티비티 생성 및 화면구성이 완료되면 애니메이션 시작
2. 이미지뷰를 클릭하면 애니메이션 시작



여기서 애니메이션이 시작되도록 하는 코드는 단 3줄입니다.

mIvAnimation.setBackgroundResource(R.drawable.count_down);
AnimationDrawable frameAnimation = (AnimationDrawable) mIvAnimation.getBackground();
frameAnimation.start();


mIvAnimation.setBackgroundResource(R.drawable.count_down);
: AnimationList에 아이템으로 포함되어있는 drawable 리소스를 ImageView의 백그라운드로 지정합니다.
: 최초에 보여지는 이미지는 첫번째 아이템입니다.
: 만약 화면구성이 완료되지 않은 시점에 AnimationDrawable.start() 메소드를 실행하였다면 첫번째 아이템만 보여집니다.


AnimationDrawable frameAnimation = (AnimationDrawable) mIvAnimation.getBackground();
: 위에서 백그라운드로 지정된 애니메이션 리소스를 AnimationDrawable로 캐스팅하여 인스턴스를 만든다.

frameAnimation.start();
: 애니메이션을 시작한다.
: stop() 이라는 메소드를 통해서는 애니메이션을 멈출 수 있습니다.



AniamtionDrawable, 우리가 사용하려는 FrameAnimation,
애니메이션은 화면구성이 완료되지 못한 시점에서는 애니메이션에 대해 start를 할 수 없습니다.

그래서 아래와 같은 코드로
약간의 딜레이를 주어 화면 구성이 완료되고 난 이후에 애니메이션에 대한 start() 명령을 실행하도록 합니다.
아래에서는 1초의 딜레이를 주었습니다.

        // 뷰가 화면에 뿌려지기 전에는 애니메이션이 시작하지 못한다.
        // 약간의 딜레이를 주기 위하여 핸들러를 이용한다.
        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                mIvAnimation.setBackgroundResource(R.drawable.count_down);
                AnimationDrawable frameAnimation = (AnimationDrawable) mIvAnimation.getBackground();
                frameAnimation.start();
            }
        }, 1000);



ClickEvent를 처리해주는 onClikc() 메소드에서 위와같은 딜레이없이 실행이 가능한것은 당연히 화면구성이 완료된 이후의 시점이기 때문입니다.







 실행화면 및 예제프로젝트

아래는 캡춰화면과 프로젝트 예제소스입니다.










 


Posted by croute

댓글을 달아 주세요

  1. 2013.01.03 16:30  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다