Ich schreibe eine einfache App, die eine Material Design-konforme Nav-Schublade implementiert, wie in diesem Stack-Beitrag beschrieben: Ссылка
Das ScrimInsetsFrameLayout
funktioniert großartig und alles ist gut, bis ich versuche, die Farbe der Statusleiste programmgesteuert zu ändern. Meine App verwendet die Paletten-API, um die Farbe der Symbolleiste und Statusleiste dynamisch zu ändern.
Ich verwende die Eigenschaftsanimation api , um die Symbolleiste zu animieren, und sie funktioniert groß! aber ich versuche die gleiche animation auf der statusleiste zu machen und es scheint nicht animieren zu wollen. Hier ist ein Beispiel
Hier ist der Code für meinen Animator:
%Vor%Hinweis: Der gleiche Code verblasst die Symbolleiste, so dass es funktioniert.
Meine Frage ist; Kennt jemand einen Weg, um einen reibungslosen Übergang zu erhalten, wenn Sie DrawerLayout.setStatusBarBackgorundColour()
verwenden?
Hinweis: Ich habe die Methode window.setStatusBarColor()
der Window-Methode verwendet, die animiert, aber die "transparente Statusleiste" bricht, wenn der NavDrawer eingezogen wird.
Wie von adneal's Kommentar zu meiner ursprünglichen Frage mitgeteilt, bestand die Antwort darin, die Ansicht während der Animation ungültig zu machen.
DrawerLayout berechnet den obersten Einschub und zeichnet den Hintergrund der Statusleiste selbst. Sie müssen also nur View.invalidate aufrufen, um das Neuzeichnen zu erzwingen, während die Animation aktualisiert wird. @adneal
Ich habe meinen Code zu diesem
aktualisiert %Vor%Für jeden, der sich fragt, warum das funktioniert hat, fand ich diesen Stapel aufschlussreich: Wenn es notwendig ist, invalidate () in einer Ansicht auszuführen?
Sie können dies leicht wie folgt tun:
1 - Setzen Sie Ihre Statusbarfarbe auf transparent, indem Sie Folgendes verwenden:
%Vor%2 - Definieren Sie die Ansicht der Anwendung, um den Hintergrund zu ändern:
%Vor%3 - fügen Sie dann diese Funktion zu Ihrem Projekt hinzu:
%Vor%4 - und ändern Sie dann die Hintergrundfarbenanimation der Lochanwendung mit der oben beschriebenen Funktion:
%Vor%