12 Stimmen

Übergang zu einem AnimationDrawable hinzufügen

Ich habe einen Satz von 10 Bildern und möchte eine Animation erstellen, in der ich zwischen den Bildern überblende. Ich habe in integrierten Drawable suchen, um so etwas zu erreichen, aber kein Glück auf diesen Teil. Es gibt das AnimationDrawable, das zwischen den Bildern wechselt, aber es animiert den Wechsel nicht. Es gibt die TransitionDrawable, die Überblendung zwischen zwei Bildern, aber nicht mehr als zwei.

Die Hölle.

Ich habe bei Google nach einer Lösung gesucht, aber kein Glück gehabt. Also ich denke über die Implementierung meiner eigenen drawable, um so etwas zu erreichen. Hätte jemand von Ihnen irgendwelche Hinweise?

Vielen Dank im Voraus.

22voto

Chris Blunt Punkte 966

Nicht sicher, ob Sie eine Antwort auf diese gefunden, aber ich hatte das gleiche Problem und endete mit dem Aufbau meiner eigenen Klasse auf TransitionDrawable basiert.

Verwendung:

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

imageView.setImageDrawable(ctd);

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

Der Code für das CyclicTransitionDrawable lautet verfügbar auf Github .

14voto

voghDev Punkte 5402

Nun. Lange Zeit ist vergangen, und Sie wahrscheinlich das Problem behoben, aber Sie haben setEnterFaceDuration() für AnimationDrawable. Beispiel:

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

Mit diesem Code haben Sie eine einfache Zyklus durch 1..N Bilder, jeder bleibt 5s (5000ms) mit einem fade-in Animation. Nun, was ich tue, ist die Einstellung der Hintergrund meiner Root RelativeLayout

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

Und die Klasse AnimationStarterThread

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X