ObjectAnimator Animation: Auf 5.1 eine Sekunde, auf 4.0.3 zwei Sekunden

  • Antworten:9
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 2.492

29.02.2016, 21:55:19 via Website

Hallo,

ich habe ein kurioses Problem.
Ich habe eine ProgressBar, die per Xml Definition progress = 0 hat und als progressDrawable einen Kreis.
In meinem Fragment mache ich folgendes:

pbCircle.setMax(2000);
animation = ObjectAnimator.ofInt(pbCircle, "progress", 0, 2000);
animation.setDuration(2000);
animation.setInterpolator(new DecelerateInterpolator());
animation.setRepeatMode(ObjectAnimator.RESTART);
animation.setRepeatCount(ObjectAnimator.INFINITE);
animation.start();

Das komische ist nun, auf meinem One V (Android 4.0.3, 19) dauert diese Animation wirklich 2 Sekunden.
Auf meinem One M9 (Android 5.1, 22) jedoch nur eine Sekunde, genau die Hälfte. Woran kann das liegen?

Edit: Grad noch mit paar Emulatoren getestet, da hat es auch überall 2 Sekunden gedauert (Api 19 und Api 23 getestet). Also bisher ist das Problem nur auf meinem M9.

— geändert am 29.02.2016, 22:26:06

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

01.03.2016, 07:47:06 via App

Vielleicht lässt sich die Geschwindigkeitbaus dem System auslesen. Dann brauchst du nur noch den Wert als Faktor der Zeit nehmen

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

Antworten
  • Forum-Beiträge: 2.492

01.03.2016, 08:10:09 via Website

Die Idee hatte ich auch, finde aber leider nichts dazu. Das Problem ist ja, dass meine App einen "Countdown" mithile einer Animation hat. Und dieser Countdown darf ja nicht je nach Einstellung schneller oder langsamer sein. Gibt es da zur Not andere Möglichkeiten?

— geändert am 01.03.2016, 08:15:03

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

01.03.2016, 18:10:30 via Website

Die Animation muss unabhängig von Countdown sein oder benutzt du diese als Timer?
Das ist eher schlecht, ich würde den Timer machen und dann bei Ablauf einer Sekunde eine kurze Animation o.ä.
Sonst sehe ich da kine Lösung außer halt irgendwo informieren, dass der User die settings ändern soll.

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

Antworten
  • Forum-Beiträge: 2.492

01.03.2016, 18:21:38 via Website

Die Animation soll den Countdown darstellen. Versuche es mit einem Handler und sendEmptyMessageDelayed() sodass ich in der handleMessage() den Progress immer nach und nach bis zu einem bestimmten Wert hoch setze. Ob das elegant ist weiß ich nicht, scheint aber zu funktionieren.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

01.03.2016, 19:27:36 via Website

Ich weiss ja nicht was das für eine Animation ist, umschalten der Zeit o.ä. aber ich würde den Handler nehmen und immer bei "Tick" also beom event einee kurze Animation ausführen, da macht der Animationsfaktor nichts.

Oder du schaust ob de das irgendwie syncen kannst. Animation und Zeit. Vlt über eine Zeitmessung in onStart und onEnd der Animation o.ä.

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

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

01.03.2016, 19:42:40 via Website

Dann geht es glaub nur wenn die Entwicklereinstellungen richtig sind.

Aber das sollten sie ja im normalfall sein.

Ansosnten gäbe es noch den Weg, du programmierst das komplett selber mit einer View (Canvas) auf welchem du das dann zeichnest.
Dann wärst du von den Animationsgeschwinigkeiten unabhängig.

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

Antworten
  • Forum-Beiträge: 2.492

01.03.2016, 20:16:48 via Website

Gab doch noch ne andere Möglichkeit; wieder zurück zum CountdownTimer. Da habe ich im onTick() den Progress gesetzt, aber da ich ja manchmal die Periodendauer ändern musste, habe ich den CountdownTimer zu diesen Zeitpunkten neu initialisiert mit der entpsrechenden Dauer. Das sowas nicht einfacher geht, sowas haben doch voll viele Spiele...:?

— geändert am 01.03.2016, 20:17:04

Antworten

Empfohlene Artikel