2011-09-07 21 views
6

sto usando un ViewAnimator (classe padre di ViewFlipper) per fare una sorta di libro interattivo. La gerarchia è più o meno in questo modo:Come migliorare le prestazioni di ViewFlipper/ViewAnimator

<ViewAnimator> 
    <include layout="@layout/p0" /> 
    <include layout="@layout/p1" /> 
    <include layout="@layout/p2" /> 
    ... 
</ViewAnimator> 

Quindi le pagine del libro sono all'interno del ViewAnimator. Ogni pagina ha un FrameLayout con più livelli di immagini animate, TextView, pulsanti ... che si sono rivelati eccessivi. La visualizzazione di una nuova pagina del libro tramite viewAnimator.showNext() può richiedere alcuni secondi. Tutto il tempo è trascorso in ImageView.onDraw() -Traceview.

-Will qualsiasi layout alternativo a ViewAnimator (ViewPager, altre implementazioni di ViewGroup ...) migliorare qualcosa?

-C'è un modo per precaricare le viste a ViewFlipper/ViewAnimator/altro verrà visualizzato il prossimo? (in modo che la pagina successiva del libro sia sempre pronta e felice in memoria)

-Sto utilizzare Canvas o GLSurfaceView? (non è possibile utilizzare il framework di animazione)

Sono bloccato ... puoi aiutare?

+0

Sto cercando di utilizzare ViewFlipper per simulare il comportamento di Panorama Control in Windows Phone e c'è lo stesso problema (lanciando la visualizzazione lenta). Come migliorare la visualizzazione di ViewFlipper? – anonim

risposta

3

Non posso rispondere a tutte le vostre domande, ma vi darò quello che so poiché è meglio della mancanza di altre risposte. : P

ViewPager carica le viste su entrambi i lati per impostazione predefinita. Questo accelera lo switch, ma potrebbe rallentare la vista che è attualmente aperta. Il numero di viste precaricate su un viewpager può essere impostato utilizzando uno dei suoi metodi.

Se non si desidera un ViewPager, è possibile provare effettivamente a istanziare le viste che si desidera precaricare e semplicemente impostandole su invisibili.

Non ho esperienza con la tela o GL oltre alle sovrapposizioni di mappe, ma mi aspetto che potrebbero essere molto più veloci/reattivi/efficienti se correttamente implementati poiché non si avrebbe alcuna funzionalità non necessaria. Potrebbe essere disordinato, a seconda della fonte del tuo contenuto.

RACCOMANDAZIONE: Prova il ViewPager, è fatto per implementazioni come la tua. Se non sei soddisfatto, rimboccati le maniche e controlla su tela.

4

per migliorare le prestazioni del ViewFlipper, è possibile impostare

Android: measureAllChildren = "false"

nel xml. Questo è normalmente impostato su false per FrameLayout, ma ViewAnimator lo abilita di default per qualche motivo.

Impostare su false ha risolto un problema di lag molto strano per me.

+0

... molto vero. Grazie per l'apertura degli occhi –

Problemi correlati