2012-05-17 23 views
5

Ho un'app che consente agli utenti di creare complicati layout di schermo da una serie di controlli predefiniti. Quindi quei controlli parlano tra loro per generare la funzionalità finale. Il problema che sto vedendo è che non importa quello che faccio sembra che qualsiasi ridisegno causato da un cambiamento in un controllo stia costringendo l'intero schermo a ridisegnare (come visto abilitando "Mostra modifiche schermo"). Poiché ho un sacco di controlli personalizzati senza molto XML dietro di loro, questo ridisegno può essere piuttosto lento.Come impedire a Android di ridisegnare l'intero schermo ogni volta che qualcosa cambia?

Ad esempio, un controllo può essere una calcolatrice costruita con pochi layout lineari. Un'altra potrebbe essere una griglia di comandi generata dinamicamente da layout lineari. Ognuno di questi viene quindi aggiunto a un layout relativo genitore quando viene caricato lo schermo. Premendo un tasto sulla calcolatrice si forza il ridisegno della griglia dei comandi anche se nulla è cambiato in nessuna delle sue viste.

Ho tentato di attivare l'accelerazione hardware e di modificare tutti i tipi di layer delle viste su LAYER_TYPE_HARDWARE senza fortuna.

Come si assicura che venga ridisegnata solo una sottosezione specifica dello schermo? A questo punto non sto facendo nessuna chiamata per invalidare me stesso, ma ho le mie versioni personali di pulsanti, layout e altre componenti dell'interfaccia utente, quindi se ho bisogno di scendere a quel livello di controllo almeno c'è già un framework in atto per questo.

risposta

0

questo sembra più o meno come questo .. Moving Android View and preventing onDraw to be called over and over again se si desidera solo disegnare una sezione, provare a chiamare invalidate(rect) dove rect è un Rect che si definisce una zona che sarà "ridisegnato", diverso da quello che per quanto ne so voi non si può.

+0

Non proprio, forse non lo sto spiegando bene. Ho un pulsante sullo schermo. Quando premo quel pulsante, si passa al suo stato premuto. Questo, ovviamente, richiede che il pulsante venga ridisegnato. Ma quello che sto vedendo è che l'intero schermo è ridisegnato, non solo il pulsante. Non sto chiamando invalidare me stesso, lasciando che il widget Android sottostante faccia la sua parte. Deve essere possibile. Ho giocato con altre app sul dispositivo con Show Screen Changes abilitato e posso vedere alcune di esse solo ridisegnare parti dello schermo mentre altre ridisegnano tutto. Anche la mia app si limita quando uso dialoghi o toast. –

+0

Io ho alcune versioni personalizzate di pulsanti, layout, ecc., Ma sono molto semplici e non sto ignorando alcuna funzione che riguarda il ciclo di disegno. –

Problemi correlati