2010-04-06 8 views
7

Sono nuovo nello sviluppo di Android, sto solo leggendo i documenti e provando le API . Ho smesso di confondere come ImageView sia riuscita a disegnare solo una parte di il suo contenuto dopo un'invocazione invalida (Rect).In che modo ImageView ridisegna semplicemente parte del suo contenuto quando viene chiamato invalidate (Rect)?

Ho controllato ImageView.java, trovato nessun altro metodo di disegno, tranne OnDraw (Canvas), ma OnDraw (Canvas) tagliare solo la drawable solo se è beyound confine visibile della vista. Ho letto anche l'implementazione di View.invalidate (Rect), penso che la chiave di questa funzione stia chiamando a mParent.invalidateChild (this, r); Tuttavia, penso che la vista genitore non sappia come disegnare il bambino in il Rect dato, alla fine deve chiamare un metodo di esso child a paint out.

Qualcuno ha studiato questa parte dei codici? Potresti darmi una guida, per favore, ?

risposta

1

Immagino che il codice sia nella classe View.

Ci sono alcune due risposte interessanti di Romain Guy nel gruppo Google.

+0

-1 poiché entrambi i collegamenti sono morti. Includere parte del loro contenuto qui sarebbe stato meglio. –

+1

+1 perché i collegamenti non sono morti ... li ho appena testati. Tuttavia, sono d'accordo che l'aggiunta di contenuti è una buona cosa da fare in casi come questo. – Justin

0

penso Android disegnare la vista proprio come tela j2me, tutto il codice sorteggio non è disegnare direttamente su hardware (schermo), solo disegnare un buffer o drawable o qualcosa. Quando chiamiamo View.invalidate (Rect), il sistema copia l'immagine nel rettangolo del buffer (o disegnabile) nell'hardware (schermo).

3

Per quanto posso raccogliere ci sono due ottimizzazioni in corso. Per uno, se il bambino è un gruppo di vista, solo i bambini di questo gruppo vengono ridisegnati che intersecano l'area invalida. Inoltre, la tela viene ritagliata ai limiti di questo rettangolo. Ciò significa che meno pixel devono essere mischiati attraverso il bus al framebuffer e che è possibile saltare le operazioni che sono troncate completamente.

Questa è un'ipotesi semi-istruita. Ho consultato la fonte qualche mese fa e sono abbastanza certo della cosa ViewGroup. Il secondo può essere testato eliminando il ritaglio in onDraw e controllando se ridisegna tutto.

+0

Sono un principiante per Android e ho una domanda qui http://stackoverflow.com/questions/21027199/am-i-invalidating-the-entire-screen-on-every-call Si prega di fornire la risposta, se possibile . – Kraken

Problemi correlati