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

  • Antworten:9
Gelöschter Account
  • 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
Gelöschter Account
  • Forum-Beiträge: 2.492

01.03.2016, 07:38:14 via Website

Ich vermute ich weiß woran es liegt. Und zwar habe ich an meinem M9 die Animationsgeschwindigkeit in den Entwickleroptionen auf 0.5x gestellt. Kann man das irgendwie rausfiltern?

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

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
Gelöschter Account
  • 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.
  • Admin
  • Forum-Beiträge: 11.286

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
Gelöschter Account
  • 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.
  • Admin
  • Forum-Beiträge: 11.286

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
Gelöschter Account
  • Forum-Beiträge: 2.492

01.03.2016, 19:32:50 via Website

Ne es ist ein Ladebalken. Also ein Kreis der von "leer" zu "voll" wird. Also sollte schon recht flüssig sein das ganze.

— geändert am 01.03.2016, 19:33:31

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

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
Gelöschter Account
  • 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