Sobes.tech
Middle

Fale sobre os métodos que redesenham a View.

sobes.tech IA

Resposta da IA

Métodos:

  • invalidate(): Marca a View como "suja", exigindo uma nova pintura. Agenda a execução de onDraw() no futuro. A repintura ocorre na thread principal. Usado se as propriedades externas da View (cor, fundo, etc.) mudarem.
  • postInvalidate(): Semelhante a invalidate(), mas pode ser chamado de qualquer thread, não apenas da principal. Seguro para uso em threads de fundo.
  • requestLayout(): Marca a View como "inválida", exigindo o recálculo do seu tamanho e posição. Agenda a execução de onMeasure() e onLayout(), depois onDraw(). Usado se as dimensões ou a posição da View mudarem (por exemplo, ao adicionar/remover elementos filhos em um ViewGroup).

Comparação de métodos:

Método Thread de chamada Recalcular layout Redesenhar
invalidate() Thread UI Não Sim
postInvalidate() Qualquer thread Não Sim
requestLayout() Thread UI Sim Sim (após layout)

Exemplo de uso de invalidate():

// Alterar a cor da View e solicitar redrawing
myView.setBackgroundColor(Color.RED)
myView.invalidate()

Exemplo de uso de requestLayout():

// Adicionar um elemento filho ao LinearLayout e solicitar o recálculo do layout e o redrawing
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()