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 deonDraw()no futuro. A repintura ocorre na thread principal. Usado se as propriedades externas da View (cor, fundo, etc.) mudarem.postInvalidate(): Semelhante ainvalidate(), 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 deonMeasure()eonLayout(), depoisonDraw(). Usado se as dimensões ou a posição da View mudarem (por exemplo, ao adicionar/remover elementos filhos em umViewGroup).
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()