Mehrere Animationen !nacheinander auf ein image loslassen

  • Antworten:3
LitteM
  • Forum-Beiträge: 141

15.03.2013, 06:20:56 via Website

Habe heute ein kleines Testprogramm geschrieben. Unter anderem hab ich mir auch ein Bild anzeigen lassen, das ich über nen Actionlistener eines Buttons auf den Bildschirm hole. Dann dachte ich mir, ich spiele noch ein bisschen mit den restlichen Operatoren herum.

Dabei bin ich auf folgendes Problem gestoßen: Die Animationen wollen nicht nacheinander starten, sondern alle gleichzeitig.

Bei zwei Animationen ließe sich das ganze ja hierüber lösen: (Hätte gerne aber mehr wie nur 2 Animationen)
1Runnable endAction = new Runnable() {
2 public void run() {
3
4 image.animate().rotationYBy(720);
5 }
6 };
7
8
9 image.animate().setDuration(2000);
10 image.animate().x(400).y(300).withEndAction(endAction);


Ich könnte das ganze ja noch weiter schachteln, aber das empfinde ich eher als unschönes programmieren. Das muss doch irgendwie einfacher/besser/strukturierter gehen.

Wäre schön wenn mir jemand damit weiterhelfen könnte! Ich habe schon eine Weile im Internet gesucht, aber bin nicht fündig geworden.
Falls es doch irgendwo zu finden ist, wäre super wenn ihr mir einen Code-Abschnitt dazu liefern könntet.
Grüße, Mathias.

— geändert am 15.03.2013, 06:26:09

Antworten
Christian Arndt
  • Forum-Beiträge: 8

15.03.2013, 14:29:59 via Website

Hallo LitteM,

guck dir mal den AnimationSet.Builder an:

developer.android.com/reference/android/animation/AnimatorSet.Builder.html

Den gibt es allerdings erst ab Api Level 11.

Leider bin ich wohl noch ein Neuling und kann hier keine Links posten :(


Viele Grüße
Christian

LitteM

Antworten
LitteM
  • Forum-Beiträge: 141

15.03.2013, 19:21:33 via Website

/Edit: Hab ein bisschen was geschafft. Jetzt nur noch schaun dass ich Bewegungen in x/y parallel schön implementieren kann und rotationen o.ä.


1ObjectAnimator fadeOut =
2 ObjectAnimator.ofFloat(image, "alpha", 0f);
3 ObjectAnimator fadeIn =
4 ObjectAnimator.ofFloat(image, "alpha", 1f);
5
6 ObjectAnimator bewegung =
7 ObjectAnimator.ofFloat(image, "x", 300f);
8
9 AnimatorSet as = new AnimatorSet();
10 as.playSequentially(fadeOut,fadeIn, bewegung);
11 as.setDuration(2000);
12 as.start();

— geändert am 15.03.2013, 19:42:38

Antworten
LitteM
  • Forum-Beiträge: 141

15.03.2013, 21:01:08 via Website

Falls es eine elegantere Variante als mein Schachtelverfahren gibt, sagt mir bitte bescheid wie das anderstweitig zu optimieren wäre! :)

1ObjectAnimator fadeOut =
2 ObjectAnimator.ofFloat(image, "alpha", 0f);
3 ObjectAnimator fadeIn =
4 ObjectAnimator.ofFloat(image, "alpha", 1f);
5 ObjectAnimator moveX =
6 ObjectAnimator.ofFloat(image, "x", 400f);
7 ObjectAnimator moveY =
8 ObjectAnimator.ofFloat(image, "y", 300f);
9 ObjectAnimator rotateY =
10 ObjectAnimator.ofFloat(image,"rotationY", 360f);
11
12
13
14 AnimatorSet as1 = new AnimatorSet();
15 AnimatorSet as2 = new AnimatorSet();
16 AnimatorSet as3 = new AnimatorSet();
17
18 as1.playSequentially(fadeOut, fadeIn);
19 as2.playTogether(moveX, moveY);
20 as1.setDuration(2000);
21 as2.setDuration(4000);
22
23 as3.playSequentially(as1,as2, rotateY);
24 as3.start();

Antworten