Ich habe eine benutzerdefinierte Ansichtsgruppe. In dieser benutzerdefinierten Ansichtsgruppe gibt es eine Reihe von benutzerdefinierten Ansichten. Die benutzerdefinierten Ansichten überlappen einander im Layout.
Die überlappenden Ansichten sollen "Ebenen" erstellen. Eine Ebene kann also statischen Inhalt erzeugen, eine andere Ebenenansicht erstellt jedoch andere animierte Inhalte. Problem tritt auf, wenn ich .postInvalidate von einem anderen Thread in einer Ansicht aufrufe, die im Grunde eine Animation ist, die mit 60FPS läuft. Außerhalb der Ebenenansichten ist 60FPS für das Gerät erreichbar, das ich verwende (Galaxy S3).
Innerhalb dieser benutzerdefinierten Ansichtsgruppe führt .invalidate dazu, dass 1 der 2 gerenderten Hardwareansichten ungültig wird und einige Softwaresichten damit ungültig werden.
%Vor%Durch die Deaktivierung einer Sicht werden die ungültigen Aufrufe an die übergeordneten Elemente in der Ansichtshierarchie gekettet. Wenn dies hardwarebeschleunigt ist, wird möglicherweise nur alles ungültig, abhängig von einem Flag in der HardwareRenderer-Klasse. Dies ist eine Optimierung. Sie können die ungültige Implementierung überprüfen. Hier ist ein Link zum entsprechenden Anruf - Invalidate () - Suche nach Hardwarebeschleunigung
Sie können den Wert von HardwareRenderer.RENDER_DIRTY_REGIONS auf Ihrem Gerät in dieser Anwendung überprüfen.
Tags und Links android android-layout android-canvas android-custom-view