In diesem Code möchte ich eine Linie zwischen den oberen zwei ImageViews zeichnen. Beim Ausführen der App wird die benutzerdefinierte Ansicht jedoch nach dem Aufruf von %code% schwarz dargestellt.
Hier ist mein Code:
%Vor%Gibt es einen Grund, warum die benutzerdefinierte Ansicht nach dem Aufruf von %code% ? schwarz dargestellt wird?
Wie Sie wissen, wird invalidate () verwendet, um eine Ansicht zu aktualisieren durch einen Aufruf von %code% .
Ich glaube, Sie haben es aufgerufen, bevor Sie update auf "true" setzen - also hat Ihre %code% -Methode mit einem falschen Update durch die Geräusche davon gespielt.
In der Regel übernimmt das System die Größenänderung, das Ausblenden, Anzeigen und eine Menge anderer Dinge für Ihre Widgets automatisch, aber es treten manchmal Probleme auf, wenn der zugrunde liegende Puffer für gezeichnete Pixel oder Hintergrunddaten geändert wurde oder veraltet ist (Sie tauschen die Bildressource ein) eine Ansicht oder der Rohdatensatz ändert sich). Dies geschieht, weil das Betriebssystem auf keinen Fall wissen kann, dass sich die Daten in der bestimmten Weise geändert haben.
In diesen Fällen, in denen Sie mit dem Zeichnen arbeiten, müssen Sie dem System mitteilen, dass die zugrunde liegenden Daten mit Widget.invalidate () nicht in einem guten Zustand sind, und die Re-Zeichnung wird in den Haupt-Thread eingereiht . Abhängig von der Systemimplementierung und der Android-Version variiert das, was für Änderungen vom System verfolgt wird, aber was ich normalerweise tue, wird davon ausgegangen, dass Systemressourcen (Byte-Arrays, Char-Arrays, Ressourcenindizes, manuelles Zeichnen auf den Kontext) nicht verfolgt werden und ungültig werden müssen und alles andere wird vom System gehandhabt.
Quelle: Wenn es notwendig ist, invalidate () on auszuführen eine Ansicht?