Animation die mehrere Bilder hintereinander anzeigt.

  • Hallo,


    ich habe ein ImageView das ich gerne animieren würde.


    Ich möchte das das ImageView n Bilder hintereinander anzeigt.
    Ich würde gerne die Geschwindigkeit in der die Bilder wechseln beeinflussen können.


    Gibt es dafür bereits eine Animation oder muss ich mir selber eine schreiben?
    Wie wäre euer Vorgehen?


    crosspost:
    http://www.androidpit.de/de/an…einander-anzeigt#p1062366


    Danke & Gruß
    Andreas

  • private AnimationDrawable animatedImageview;
    private ImageView imageViewAnimation;


    dann kommt in die oncreate methode



    imageViewAnimation = (ImageView)this.findViewById(R.id.imageViewAnimation);
    if (imageViewAnimation.getDrawable() instanceof AnimationDrawable)
    {
    animatedImageview = (AnimationDrawable)this.imageViewAnimation.getDrawable();
    Handler handler = new Handler(getMainLooper());
    handler.postDelayed(new Runnable()
    {


    @Override
    public void run() {

    animatedImageview.start();

    }

    }
    , 1500);

    }




    deine animation.xml sollte ungefähr so aussehen und sich im ordner drawable befinden (ist in diesem beispiel so. kann ja natürlich auch geändert werden, wobei du dann das auch in der layout abändern musst.)



    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android" >


    <item android:drawable="@drawable/bild1" android:duration="500"/>
    <item android:drawable="@drawable/bild2" android:duration="500"/>
    <item android:drawable="@drawable/bild3" android:duration="500"/>
    <item android:drawable="@drawable/bild4" android:duration="500"/>
    <item android:drawable="@drawable/bild5" android:duration="500"/>
    <item android:drawable="@drawable/bild6" android:duration="500"/>
    <item android:drawable="@drawable/bild7" android:duration="500"/>
    ...
    ...
    ...

    </animation-list>




    in deiner layout sollte sich dann die imageview wie folgt befinden:



    <ImageView
    android:id="@+id/imageViewAnimation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="center"
    android:src="@drawable/animation" />





    sooo..... habe es nicht getestet, habe es aus nem projekt nur copy&paste...


    sollte denke ich soweit funktionieren... falls nicht, hast ja zumindest mal nen guten ansatz dafür, wie es funktionieren kann xD

  • Auch wenn der Thread schon etwas älter ist, probiere ich hier mal mein Glück!


    Ich habe eigentlich genau das Selbe Problem wie der Threadersteller - Nämlich möchte ich gerne mehrere Bilder hintereinander anzeigen lassen, um den Effekt einer Bewegung nachzuempfinden.


    Nun habe ich das auch mit dem AnimationDrawable nachgebaut und soweit wäre eigentlich auch alles okay.


    Bloß habe ich im Hintergrund in einem separaten Thread eine ProgressBar die durch die Animation etwas ruckelt...


    Nun wollte ich fragen, ob der Weg mit den einzelnen Bilder der richtige ist, wenn man pro Bewegungseffekt ca. 20 Bilder hat, oder weicht man bei sowas lieber auf eine andere Methode wie z.B. ne .MP4 oder so aus?


    Wäre sehr dankbar für jede Antwort!


    Liebe Grüße,


    euer Steven1997

  • Das kommt jetzt absolut auf deine Animation an.


    Die Version mit einzelnen Bildern würde ich in einem Thread realisieren um andere Elemente in deiner App nicht zu beeinflussen.

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Das kommt jetzt absolut auf deine Animation an.


    Die Version mit einzelnen Bildern würde ich in einem Thread realisieren um andere Elemente in deiner App nicht zu beeinflussen.

    Danke für die schnelle Antwort! :)



    Ich bin mir nicht sicher, ob das Laden der Bilder nicht zu viel Performance schluckt, wenn auf einmal 20 Bilder hintereinander geladen werden. Man könnte dies ja auch auch als Bitmap eventuell realisieren um die Bilder zu chachen. Aber ist das überhaupt der optimale Weg? Geht es nicht vielleicht anders? Ich möchte es möglichst Perfomancearm programmieren... :thumbup:

  • Könntest du mal eins dieser Bilder zeigen, damit man sich ein besseres "Bild" von deinem Vorhaben machen kann?

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Cool,
    habe aber noch mehr Fragen im Gepäck.


    Wie viele Bilder sind es?
    Welches Format haben die Bilder?
    Wie viele Bilder werden in einer Sekunde gezeigt?

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Cool,
    habe aber noch mehr Fragen im Gepäck.

    Natürlich beantworte ich die Fragen gerne ^^

    Wie viele Bilder sind es?

    Sind 25 Bilder

    Welches Format haben die Bilder?

    Die Bilder sind im .PNG Format, damit der Hintergrund transparent sein kann :saint:

    Wie viele Bilder werden in einer Sekunde gezeigt?

    Die duration habe ich auf 100 gesetzt. Kann natürlich auch noch höher gesetzt werden - war jetzt eher wegen Testzwecken so niedrig. :whistling:

  • Gut,
    bei gerade mal 20 Bildern kannst du ruhig alle laden und dann abspielen.


    100 ist allerdings sehr viel. Für eine flüssige Scene sind 60 Bilder die Sekunde absolut ausreichend.


    Wie möchtest du jetzt weiter vorgehen?
    Kennst du dich mit Threads aus?

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Gut,
    bei gerade mal 20 Bildern kannst du ruhig alle laden und dann abspielen.


    100 ist allerdings sehr viel. Für eine flüssige Scene sind 60 Bilder die Sekunde absolut ausreichend.


    Okay! Weiß ich bescheid! Vielen Dank für die Hilfe ^^ Hast mir wirklich sehr geholfen :thumbup:

    Wie möchtest du jetzt weiter vorgehen?
    Kennst du dich mit Threads aus?

    Ich kenne mich mäßig mit Threads aus. Habe für die Animation nen Thread erstellt und diesen ausgeführt um den MainThread nicht zu belasten. Ist doch die richtige Vorgehensweise, oder? :thumbup:



    Nochmal vielen Dank für alles! :saint:

  • Ich glaube den Rest bekommst du ganz gut hin.


    Mit dem Thread meinte ich nicht die Entlastung des Hauptthread.
    Ich meinte das wegen deiner Aussage, dass deine ProgressBar ruckelt. Also für diese einen Thread und für deine Animation. Plus den Hauptthread wären das also 3 Threads.

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Mit dem Thread meinte ich nicht die Entlastung des Hauptthread.
    Ich meinte das wegen deiner Aussage, dass deine ProgressBar ruckelt. Also für diese einen Thread und für deine Animation. Plus den Hauptthread wären das also 3 Threads.

    Ja, ich habe für die ProgressBar einen Thread erstellt und für die Animation, um diese separat voneinander ablaufen zu lassen. Ist die Herangehensweise falsch? Sollte ich die Animation im MainThread durchführen lassen, weil dieser wohlmöglich mehr Performance zur Verfügung hat? :huh: ^^



    Vielen Dank für die tatkräftige Unterstützung @Fischkralle :thumbup: Weiß ich wirklich sehr zu schätze!


    Liebe Grüße! :)

  • Weiß jemand ob man wirklich aus dem Nichthauptthread in die GUI zeichnen kann? Ich glaube bei der C# Technologie WPF ging das nicht. Geht das denn hier? Ich hätte sonst nen Timer erwähnt. Asynchron aber im Haupthread, normalerweise.

    Und denkt immer daran: "Das Leben ist ein Handschuh, der gar nicht existiert. Mal ist er da, dann wieder nicht. Das ist des Lebens Lauf. Du denkst du kannst ihn sehen, doch dann trickst er dich aus."

  • Weiß jemand ob man wirklich aus dem Nichthauptthread in die GUI zeichnen kann? Ich glaube bei der C# Technologie WPF ging das nicht. Geht das denn hier? Ich hätte sonst nen Timer erwähnt. Asynchron aber im Haupthread, normalerweise.

    Habe das mitm Handler gelöst. Der kann soweit ich weiß GUI-Elemente "zeichnen" bzw. darstellen.

  • Habe das mitm Handler gelöst. Der kann soweit ich weiß GUI-Elemente "zeichnen" bzw. darstellen.

    Das sagt eher aus das du noch im Hauptthread bist. Meine Frage war ob dass denn im Nichthauptthread geht. Ich befürchte nämlich nicht. Was für einen Handler hast du benutzt?

    Und denkt immer daran: "Das Leben ist ein Handschuh, der gar nicht existiert. Mal ist er da, dann wieder nicht. Das ist des Lebens Lauf. Du denkst du kannst ihn sehen, doch dann trickst er dich aus."

  • Also ich bin noch ziemlicher Anfänger.. Deswegen zeige ich dir lieber den Quellcode, bevor ich hier irgendwas falsches von mir gebe. Mit der oben gezeigten Klasse, kann ich auf jeden Fall die Animation über aufrufen der "animationClass()" die Aktion durchführen, ohne Abstürze zu verursachen... :rolleyes:


    Liebe Grüße

  • Mit folgendem Blog hadt du eine neuen Thread auf gemacht und bist so vom Hauptthread weg.


    Java
    Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    handlerAnimation.sendEmptyMessage(0);
                }
    };

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!