2013-03-19 9 views
8

Per un View che a volte è visibile e talvolta no, a seconda delle azioni dell'utente, (rimanendo nella stessa attività) cosa è preferibile?In base a quale circostanza dovrebbe essere utilizzato INVISIBILE anziché GONE?

myView.setVisibility(View.INVISIBLE); // or 
myView.setVisibility(View.GONE); 

Nessun altro elemento dipende dalla dimensione o dimensioni s' myView, quindi il risultato grafica è la stessa.

Poiché INVISIBLE non modifica le dimensioni della vista, suppongo che sia più preferibile di GONE perché con GONE è necessario misurare e ridisegnare altre visualizzazioni inutilmente. E poi ri-misurare e ridisegnarli quando myView viene reso nuovamente VISIBILE.

risposta

20

Sei sulla strada giusta pensando all'impatto sulla misurazione. Qual è più efficiente tutto dipende da quanto frequentemente si cambia la visibilità della vista. Ad esempio, se la vista non è visibile per la maggior parte del tempo, renderla GONE probabilmente sarebbe più efficiente, perché il sistema non misurerebbe inutilmente e non esporrà la vista invisibile ogni volta che è necessario regolare altre visualizzazioni sullo schermo.

D'altra parte, se la vista cambia frequentemente tra visibile e invisibile, è possibile ottenere prestazioni migliori da INVISIBLE poiché si potrebbe potenzialmente evitare una misura/layout supplementare su ciascuna transizione.

-2

Gli altri elementi non dipendono dalla visibilità della vista, quindi è possibile utilizzare uno di essi. Entrambi avrebbero lo stesso scopo.

0

voglio aggiungere una certa esperienza su questo da parte mia:

Ho un pulsante animato (utilizzando un ValueAnimator). Il pulsante si sposta da un lato all'altro.

Questo pulsante cambia il contenuto di un elenco.

  • primo approccio: utilizzare un listview e modificare l'adattatore => Non regolare; il pulsante "sposta animazione" salta alla sua posizione finale, perché il caricamento del nuovo adattatore richiede troppo tempo dal thread dell'interfaccia utente. Il pulsante ha solo 200 ms per eseguire l'animazione e questa volta è completamente occupato dallo ListView.
  • Ho aggiunto un secondo ListView, utilizzando lo stesso problema ViewSwitcher =>.
  • Perché un ViewSwitcher infatti imposta solo la vista a VISIBILE o GONE, mi aspettavo che il ridisegno quando si imposta l'elenco per VISIBILE costo per molto tempo thread UI. Quindi quello che ho fatto ora è stato aggiungere un FrameLayout, inserire i due ListView s e impostarlo su INVISIBILE anziché GONE. Ora la balbuzie non si vede più!

Spero che questo aiuti qualcuno.

Problemi correlati