Animationen mit View.animate

  • Antworten:8
  • Bentwortet
Georg S.
  • Forum-Beiträge: 4

24.09.2014, 11:59:06 via Website

Ich erstelle gerade eine kleine App (mit Android Studio), in der ich für Animationen die animate-Methode eines ImageView benutze, dazu die der Klasse ViewPropertyAnimator. Es geht dabei um diese Zeilen:

// Bild = ImageView
Bild.animate().alpha(0f).setDuration(1000);
Bild.animate().alpha(1f).setDuration(1000);

Ein Bild soll innerhalb einer Sekunde ausgeblendet und anschließend wieder eingeblendet werden. Was passiert? Das Bild bleibt einfach wie es ist. Lässt man die letzte Anweisung weg, wird es wie gewünscht ausgeblendet. Anscheinend werden beide Animationen nicht getrennt ausgeführt, sondern quasi zu einer verschmolzen (?).

— geändert am 24.09.2014, 12:28:22

Antworten
Klaus
  • Blogger
  • Forum-Beiträge: 19.172

24.09.2014, 12:19:21 via Website

Hallo Georg!

Herzlich Willkommen hier bei uns im Forum.

Bitte beachte, dass Threads mit nicht aussagekräftigem Titel bei uns üblicherweise den Regeln entsprechend entfernt werden. Ich bitte dich daher, deinen Threadtitel spätestens innerhalb der nächsten 24 Stunden noch etwas aussagekräftiger zu gestalten (Hierfür einfach unter deinem ersten Beitrag auf 'Bearbeiten' klicken, dann kannst du oben noch mal den Titel anpassen)

Danke :)

| LG Klaus |
| Google Nexus 6P - Dirty Unicorns | Google Nexus 6 - Dirty Unicorns |
| Das AndroidPITiden-Buch | Die Androiden-Toolbox | AndroidPIT-Regeln |

Antworten
Fabian Simon
  • Forum-Beiträge: 359

24.09.2014, 12:53:42 via Website

Was passiert denn wenn ein Thread.sleep(1002) zwischen die beiden Befehle legst ?

Antworten
Georg S.
  • Forum-Beiträge: 4

24.09.2014, 16:27:29 via Website

Hab ich schon versucht, dann ist zwar ne Sekunde Pause, aber das Bild bleibt so, als hätte ich nur Alpha(1) benutzt. Vielleicht liegt es daran, dass das ViewPropertyAnimator-Objekt alle Animationsprozesse zusammenlegt oder nur den letzten als zu erledigen ansieht???

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.09.2014, 16:33:46 via Website

Am besten du fügst mal 2 Buttons (oder ähnliches) ein, und reagierst dann bei click auf einblenden bzw. ausblenden.
So kannst du überprüfen,ob das Problem am nacheinanderstehen der beiden Zeilen leigt.

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Georg S.
  • Forum-Beiträge: 4

24.09.2014, 16:43:49 via Website

Bei zwei Buttons klappt es so: der eine soll einblenden, der andere ausblenden. Sind die beiden Zeilen getrennt in zwei verschiedenen onClick-Routinen, dann funktioniert alles. Sobald die beiden irgendwie in derselben Methoden zusammenkommen, wird alles ein animate-"Brei". Wahrscheinlich muss ich einen umständlicheren Weg gehen, es gibt ja noch andere Animations-Klassen, die man einsetzen kann (nur nicht so bequem). :(

— geändert am 24.09.2014, 16:44:28

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.09.2014, 16:47:11 via Website

Nein, so kompliziert musst du das garnicht machen:

Bild.animate().alpha(0f).setDuration(1000);

final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
      @Override
      public void run() {
Bild.animate().alpha(1f).setDuration(1000);

      }
    }, 1500); //Zeit 1500 kann variiren, darf aber nicht kleiner 1000 werden

Nun wird die erste animation gestartet, und durch den Handler zeitversetzt dann die 2.
Ich denke dass sollte so funktionieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Georg S.
  • Forum-Beiträge: 4

24.09.2014, 16:59:20 via Website

Hab ich probiert und es klappt! Toll und danke, Pascal! :D

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.09.2014, 17:01:55 via Website

Kein Problem :)

Bitte setze jetzt noch deinen Thread auf beantwortet. (Über deinem ersten Post auf "Mehr"->"Thread auf Beantwortet setzen" )

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten