Ich bin eine einfache Anwendung zu schreiben, die ein Material Design-konforme nav Schublade implementiert wie dieser Stapel Post beschrieben: https://stackoverflow.com/a/27153313/1621380Animate Statusleiste Farbe auf DrawerLayout - Material Design
Die ScrimInsetsFrameLayout
funktioniert super und alles ist prima, bis ich versuche, programmgesteuert die Farbe der Statusleiste ändern. Meine App verwendet die Paletten-API, um die Farbe der Symbolleiste und der Statusleiste dynamisch zu ändern.
Ich verwende die property animation api die Symbolleiste zu animieren und es funktioniert super! aber ich versuche, die gleiche Animation auf der Statusbar zu tun und es scheint nicht animieren zu wollen. Hier ist ein Beispiel
Hier ist der Code für meine Animation:
public static void fadeStatusBar(final DrawerLayout layout, Integer from, Integer to) {
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), from, to);
colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
layout.setStatusBarBackgroundColor((Integer) animator.getAnimatedValue());
}
});
colorAnimation.start();
}
}
Hinweis: Die gleiche Code, um die Symbolleiste schwindet, so dass sie bewiesen zu arbeiten.
Meine Frage ist; kennt jemand eine Möglichkeit, um einen reibungslosen Übergang zu erhalten, wenn DrawerLayout.setStatusBarBackgorundColour()
mit?
. Hinweis: Ich habe die Fenster Methode window.setStatusBarColor()
Methode verwendet, und es belebt in Ordnung, aber bricht die „transparent statusbar“, wenn die NavDrawer in Mitleidenschaft gezogen wird
Hinweis gibt es auch die Helfer-Methode [ValueAnimator.ofArgb()] (http://developer.android.com/reference/android/animation/ValueAnimator.html#ofArgb (int ...)) – ianhanniballake
[DrawerLayout] (https: //github.com/android/platform_frameworks_support/blob/lollipop-release/v4/java/android/support/v4/widget/DrawerLayout.java # L1019) berechnet den oberen 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
@adneal Das ist wunderbar und funktionierte wie ein Charme! Danke – Spittal