Unter welchen Umständen sollte INVISIBLE anstelle von GONE verwendet werden? [geschlossen]

8

Für eine View , die manchmal sichtbar ist und manchmal nicht, je nach den Aktionen des Benutzers (in der gleichen Aktivität bleiben) was ist vorzuziehen?

%Vor%

Kein anderes Element hängt von der Größe oder den Dimensionen von myView ab, daher ist das grafische Ergebnis dasselbe.

Da INVISIBLE die Abmessungen der Ansicht nicht ändert, ist das besser als GONE, da wir bei GONE unnötigerweise andere Ansichten messen und neu zeichnen müssen. Und dann neu messen und neu zeichnen, wenn myView wieder sichtbar gemacht wird.

    
minipif 19.03.2013, 17:16
quelle

3 Antworten

20

Sie sind auf dem richtigen Weg und denken über die Auswirkung auf das Messen nach. Welche Methode effizienter ist, hängt davon ab, wie häufig Sie die Sichtbarkeit der Ansicht ändern.

Wenn zum Beispiel die Ansicht die meiste Zeit nicht sichtbar ist, wäre es wahrscheinlich effizienter, sie zu GONE zu machen, weil das System nicht unnötig Ihre unsichtbare Ansicht messen und auslegen würde, wenn sie andere anpassen muss Ansichten auf dem Bildschirm.

Wenn die Ansicht jedoch häufig zwischen sichtbar und unsichtbar wechselt, erzielen Sie möglicherweise eine bessere Leistung von INVISIBLE , da Sie möglicherweise bei jedem Übergang eine zusätzliche Kennzahl / ein zusätzliches Layout vermeiden würden.

    
Scott W 19.03.2013, 17:23
quelle
0

Ich möchte etwas Erfahrung dazu von meiner Seite hinzufügen:

Ich habe eine animierte Schaltfläche (mit ValueAnimator ). Die Schaltfläche bewegt sich von einer Seite zur anderen.

Diese Schaltfläche schaltet den Inhalt einer Liste um.

  • erster Ansatz: Verwenden Sie eine Listview und ändern Sie den Adapter = & gt; Nicht weich; Die Schaltfläche "Animation verschieben" springt zur Endposition, da das Laden des neuen Adapters zu viel Zeit vom UI-Thread beansprucht. Die Schaltfläche hat nur 200 ms, um ihre Animation auszuführen, und diese Zeit wird komplett von ListView übernommen.
  • Ich habe ein zweites ListView hinzugefügt, indem ich ViewSwitcher = & gt; das gleiche Problem.
  • Da ein ViewSwitcher tatsächlich nur die Ansicht auf VISIBLE oder GONE setzt, habe ich das Neuzeichnen erwartet, als ich die Liste auf VISIBLE gesetzt habe kostet zu viel UI-Thread-Zeit. Also, was ich jetzt gemacht habe, war ein FrameLayout hinzuzufügen, die beiden ListView s dort einzufügen und es auf INVISIBLE anstatt auf GONE zu setzen. Jetzt ist das Stottern nicht mehr zu sehen!

Hoffe das hilft jemandem.

    
Boy 12.08.2014 11:30
quelle
-2

I andere Elemente sind nicht abhängig von der Sichtbarkeit Ihrer Ansicht, dann können Sie beide verwenden. Beide würden dem gleichen Zweck dienen.

    
Karan_Rana 19.03.2013 17:20
quelle

Tags und Links