Добавить переход к AnimationDrawable - PullRequest
11 голосов
/ 27 января 2012

У меня есть набор из 10 изображений, и я хочу создать анимацию, в которой я скрещиваюсь между ними. Я искал встроенный Drawable для достижения такой цели, но не повезло с этой стороны. Существует AnimationDrawable, который переключается между изображениями, но он не анимирует переключение. Существует TransitionDrawable, который затухает между двумя картинками, но не более двух.

Ад.

Я искал какое-то решение в Google, но безуспешно. Так что я думаю о реализации моей собственной прорисовки для достижения такой цели. У кого-нибудь из вас есть указатели?

Заранее спасибо.

Ответы [ 2 ]

18 голосов
/ 23 июля 2012

Не уверен, что вы нашли ответ на этот вопрос, но у меня возникла та же проблема, и в итоге я создал свой собственный класс на основе 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: доступен на Github .

11 голосов
/ 13 марта 2014

Хорошо.Прошло много времени, и вы, вероятно, исправили проблему, но вы получили setEnterFaceDuration () для AnimationDrawable.Пример:

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);

С помощью этого кода вы легко перемещаетесь по изображениям 1..N, каждое из которых остается 5 с (5000 мс) с постепенной анимацией.Теперь я устанавливаю фон моего корня RelativeLayout

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

и класса AnimationStarterThread

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