2012-01-05 11 views
8

Sto cercando di ottenere i valori dal metodo myImageView.getImageMatrix() una volta che la mia attività è pronta. Ho provato a utilizzare i metodi onCreate(), onStart(), onResume() ma la matrice che ottengo è l'impostazione predefinita.Android - C'è un evento attivato quando activity.setContentView ha finito il rendering?

Se chiamo myImageView.getImageMatrix() attivato da un OnClickListener, dopo che la mia attività è visibile, ottengo i valori corretti.


Giusto per essere più chiaro:

  • chiamando getImageMatrix onStart = Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}

  • chiamando getImageMatrix onClick = Matrix{[0.77488154, 0.0, 7.6717987][0.0, 0.77488154, 0.0][0.0, 0.0, 1.0]}

+0

Il problema è che il layout non viene misurato e reso fino onResume() finito. Controlla questa domanda per vedere come puoi ricevere una notifica quando questo accade: http://stackoverflow.com/questions/7750102/how-to-get-height-and-width-of-button – Flo

+0

Grazie per questo, si chiama onWindowFocusChanged una volta che i dati sono lì, tuttavia viene chiamato su ogni cambio di messa a fuoco. Potrei aggiungere una bandiera che indicherà lo stato di init ma non sembra così liscia. Penso che questa sia la mia soluzione per ora, qualche pensiero? –

risposta

15

si può anche provare questo metodo:

ImageView myImageView = (ImageView) findViewById(R.id.myImageView); 
ViewTreeObserver vto = myImageView.getViewTreeObserver();  
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {   
    @Override   
    public void onGlobalLayout() {    
     // do something now when the object is loaded 
     // e.g. find the real size of it etc   
     myImageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);   
    }  
}); 
+0

La tua soluzione sembra ancora la migliore, grazie :) –

+0

removeGlobalOnLayoutListener() è ora deprecato, a partire dalla versione dell'SDK 16 (Jelly Bean) removeOnGlobalLayoutListener() dovrebbe essere usato. – flo

0

Forse è possibile utilizzare un onLayoutChangeListener ma io non sono sicuro.

+0

non è sicuro, comunque Per utilizzare questa classe, l'applicazione deve specificare il livello API "11" o superiore. che sfortunatamente non è il mio caso. –

0

Forse potresti usare un AsyncTask (http://developer.android.com/reference/android/os/AsyncTask.html) che controlla se ImageView è stato caricato (forse non è uguale a null).

È possibile visualizzare una finestra di dialogo di avanzamento in onProgressUpdate e quindi continuare il codice da onPostExecute.

+0

Grazie, sembra un po 'complicato per quello che sembra essere un compito banale. "notifica quando la visualizzazione è pronta" –

4

Non sono al 100% ma avevo bisogno di sapere qualcosa di simile per il mio sviluppo e ho scoperto che onWindowFocusChanged() viene chiamato quando viene caricata la vista. Non sono sicuro che soddisfi i tuoi bisogni o meno.

+0

Grazie per questo, il onWindowFocusChanged viene chiamato una volta che i dati sono lì, tuttavia è chiamato su ogni cambio di messa a fuoco. Potrei aggiungere una bandiera che indicherà lo stato di init ma non sembra così liscia. Penso che questa sia la mia soluzione per ora, qualche pensiero? –

+0

oh sì mi dispiace dimenticarti di aggiungere quello. Ho un booleano globale che uso per assicurarmi che sia la prima chiamata di focus modificata e poi faccio quello che devo fare. Immagino che dipenda da cosa devi fare, ma se hai solo bisogno di accedere a qualcosa la prima volta che lo schermo viene caricato, una variabile globale dovrebbe correggerlo, se non il codice più elegante. – MikeIsrael

+0

Grazie ancora, lavorerò con quello;) –

Problemi correlati