2017-11-08 1 views
1

Ich habe einen einfachen Espresso-Test, der die Sichtbarkeit aufgrund eines Animationsproblems nicht bestätigt. Ich habe alle Animationseinstellungen auf dem Gerät deaktiviert.Race-Bedingungen bei der Verwendung von ViewProperyAnimators beim Testen mit Espresso

bannerLayout.animate() 
     .y(0) 
     .setInterpolator(new DecelerateInterpolator(1)); 

und meine Behauptung in Espresso ist

onView(withId(R.id.banner_layout)).check(matches(not(isDisplayed()))); 

einen Schlaf hinzufügen, bevor die Behauptung des Pass Test macht.

Antwort

0

Ich fand, dass das Erzwingen des Starts der Animation, das Starten der Animation explizit zu erzwingen, anstatt das Framework zu starten, das Problem behoben.

bannerLayout.animate() 
    .y(0) 
    .setInterpolator(new DecelerateInterpolator(1)) 
    .start(); 

Der Android docs Zustand:

void start()

Startet die aktuell anstehenden Eigenschaft Animationen sofort. Der Aufruf von start() ist optional, da alle Animationen automatisch bei nächste Gelegenheit starten. Wenn die Animationen jedoch benötigt werden, um sofort und synchron zu starten (nicht zu dem Zeitpunkt, an dem das nächste Ereignis von der Hierarchie verarbeitet wird, wenn die Animationen andernfalls beginnen würden), dann kann diese Methode verwendet werden.

Für einfache Animationen sollte dies in Ordnung sein. Wenn Sie ein komplexes Szenario mit Performance-Problemen haben, ist dies möglicherweise nicht der richtige Weg.

+0

Haben Sie versucht, den Animator in den Entwicklungseinstellungen zu deaktivieren? –

+0

@Be_Negativ yep. Das schien dieses Problem nicht zu lösen. Habe das auch gesehen, wenn ich den TransitionManager FWIW mit deaktivierten Animationen benutze. – loeschg

Verwandte Themen