Wie deaktiviere ich "Windows Animation Skala" programmgesteuert auf Android 4.0+ Geräten?

Ich benutze einen Service , der eine Ansicht mit WindowManager anzeigt, und Animation tritt jedes Mal auf, wenn ich die Größe der Ansicht ändere

 windowManagerLayoutParams.height = newHeight; ((WindowManager) getSystemService(WINDOW_SERVICE)).updateViewLayout(mMainLayout, windowManagerLayoutParams); 

Wenn ich die Skalenanimationen manuell deaktiviere, tritt keine Animation auf. Skalierung Animation deaktiviert manuell wie folgt: http://www.cultofandroid.com/11143/android-4-0-tip-how-to-find-and-disable-animations-for-a-snappier-experience/

  • Android bekommt Bildschirmgröße in XML
  • NoClassDefFoundError mit Jackson 2.2.x auf Android mit Gradle
  • Android check location services aktiviert mit play services location api
  • Android ListView aktualisieren
  • Energieverbrauch von Smartphone-Komponenten
  • Android Bewegt den Cursor von einem EditText zu einem anderen, wenn er auf einen Buchstaben im Feld klickt?
  • Gibt es eine Möglichkeit, die Fenstermaßstabsanimationen für meine Anwendung programmgesteuert zu deaktivieren?

  • Grundlegende Kommunikation zwischen zwei Fragmenten
  • Programmatisch abrufen IMEI-Nummer für Dual-SIM in Android
  • Wie kann ich den View-Status in Android nicht speichern?
  • ActionBarSherlock getMenuInflater Fragen
  • Was ist der Grund für diesen Fehler java.io.IOException: Content-Länge und Stream-Länge nicht einverstanden
  • Wie deaktiviere Start-Taste in Android wie Lock-Screen-Anwendungen tun?
  • 3 Solutions collect form web for “Wie deaktiviere ich "Windows Animation Skala" programmgesteuert auf Android 4.0+ Geräten?”

    Ich hatte gerade das gleiche Problem bei der Arbeit an einem System Overlay in der SystemUI-Paket und beschlossen, durch die Quelle zu graben, um zu sehen, ob ich eine Lösung finden könnte. WindowManager.LayoutParams hat einige versteckte Goodies, die dieses Problem lösen können. Der Trick ist, das privateFlags Mitglied von WindowManager.LayoutParams wie zu verwenden:

     windowManagerLayoutParams.privateFlags |= 0x00000040; 

    Wenn du auf die Zeile 1019 von WindowManager.java schaust, wirst du sehen, dass 0x00000040 der Wert für PRIVATE_FLAG_NO_MOVE_ANIMATION ist. Für mich hat dies gestoppt Fenster Animationen von auftretenden auf meine Ansicht, wenn ich die Größe ändern über updateViewLayout ()

    Ich hatte den Vorteil, an einem Systempaket zu arbeiten, damit ich auf privateFlags direkt in meinem Code zugreifen kann, aber du musst Reflexion verwenden, wenn du auf dieses Feld zugreifen möchtest.

    Wie @clark erklärte, kann dies durch Reflexion geändert werden:

     private void disableAnimations() { try { int currentFlags = (Integer) mLayoutParams.getClass().getField("privateFlags").get(mLayoutParams); mLayoutParams.getClass().getField("privateFlags").set(mLayoutParams, currentFlags|0x00000040); } catch (Exception e) { //do nothing. Probably using other version of android } } 

    Hast du versucht Activity#overridePendingTransition(0, 0) ?

    Schauen Sie sich die Dokumentation an :

    Rufen Sie sofort nach einem der Aromen von startActivity (Intent) oder finish () an, um eine explizite Übergangsanimation anzugeben, um als nächstes auszuführen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.