2012-01-27 1 views
9

10 세트의 이미지 세트가 있고 그 사이에서 페이드 크로스하는 애니메이션을 만들고 싶습니다. 나는 그런 것을 얻기 위해 Drawable을 기본 제공했지만 그 부분에는 운이 없다. 그림 사이를 전환하는 AnimationDrawable이 있지만 스위치에 애니메이션을 적용하지 않습니다. 두 그림 사이에 교차 페이드되지만 두 개를 넘지 않는 TransitionDrawable이 있습니다.AnimationDrawable에 전환 추가

지옥.

Google에서 몇 가지 해결책을 찾았지만 그 부분에는 행운이 없었습니다. 그래서 나는 그런 일을 성취하기 위해 내 드로어 블을 구현할 생각입니다. 혹시 혹시라도 포인터가 있으십니까?

미리 감사드립니다.

답변

15

답을 찾았는지 확실하지 않지만 동일한 문제가있어 TransitionDrawable을 기반으로 한 자체 클래스를 작성하게되었습니다.

사용법 :

CyclicTransitionDrawable ctd = new CyclicTransitionDrawable(new Drawable[] { 
    drawable1, 
    drawable2, 
    drawable3, 
    ... 
}); 

imageView.setImageDrawable(ctd); 

ctd.startTransition(1000, 3000) // 1 second transition, 3 second pause between transitions. 

CyclicTransitionDrawable의 코드는 available on Github입니다.

+0

잘 나는 심지어 내가 :-)했다하지만 솔루션이 좋고 깨끗 보이는 기억하지 않는다 , 답으로 표시해 봅시다! – Redwarp

+0

하나의 루프에만 적용 할 수있는 방법이 있습니까? – Andy

+0

현재 루프 수를 제한 할 수있는 방법이 없습니다. 추가 할 수는 있지만 원래의 TransitionDrawable 클래스를 사용하여이를 구현할 수 있다고 생각합니다. –

10

음. 오랜 시간이 지나면 문제가 해결되었지만 AnimationDrawable에 setEnterFaceDuration()이 설정되었습니다. 예 : 1..N 이미지를 통해 쉽게 자전거를이 코드와

mBackgroundAnimation = new AnimationDrawable(); 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background1), 5000); 
// ... rest of the frames 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background6), 5000); 
mBackgroundAnimation.setEnterFadeDuration(1000); 
mBackgroundAnimation.setOneShot(false); 

은, 각각의 하나는 페이드 인 애니메이션 5 초 (5000ms)에 남아있다. 이제, 내가

mLayoutRoot.setBackground(mBackgroundAnimation); 
mLayoutRoot.post(new AnimationStarterThread()); 

그리고 AnimationStarterThread 클래스 RelativeLayout의 내 루트의 배경을 설정하는 것입니다 무엇을

private class AnimationStarterThread implements Runnable { 
    public void run() { 
     if(mBackgroundAnimation != null) 
      mBackgroundAnimation.start(); 
    } 
} 
관련 문제