2012-01-05 12 views
8

Estoy tratando de obtener los valores del método myImageView.getImageMatrix() una vez que mi actividad esté lista. He intentado utilizar los métodos onCreate(), onStart(), onResume() pero la matriz que obtengo es la predeterminada.Android: ¿se activó algún evento cuando activity.setContentView finalizó la representación?

Si llamo al myImageView.getImageMatrix() activado por un OnClickListener, después de que mi actividad esté visible, obtengo los valores correctos.


Para que quede más claro:

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

  • llamando getImageMatrix onclick = Matrix{[0.77488154, 0.0, 7.6717987][0.0, 0.77488154, 0.0][0.0, 0.0, 1.0]}

+0

El problema es que el diseño no se mide y se rindió hasta onResume() terminó. Verifique esta pregunta para ver cómo puede recibir una notificación cuando esto ocurra: http://stackoverflow.com/questions/7750102/how-to-get-height-and-width-of-button – Flo

+0

Gracias por eso, se llama a onWindowFocusChanged una vez que los datos están allí, se llama a cada cambio de enfoque. Podría agregar una bandera que indicará el estado de inicio, pero no parece tan suave. Creo que esta es mi solución por ahora, ¿alguna idea? –

Respuesta

15

También puede probar este método:

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

Su solución parece la mejor hasta el momento, gracias :) –

+0

removeGlobalOnLayoutListener() ahora está en desuso, comenzando con la versión SDK 16 (Jelly Bean) removeOnGlobalLayoutListener() se debe utilizar. – flo

0

Tal vez usted puede utilizar un onLayoutChangeListener pero no estoy seguro.

+0

no estoy seguro, de todos modos Para usar esta clase, la aplicación debe especificar el nivel de API "11" o superior. que desafortunadamente no es mi caso. –

0

Quizás podría utilizar un AsyncTask (http://developer.android.com/reference/android/os/AsyncTask.html) que supervisa si el ImageView se ha cargado (quizás no sea igual a null).

Puede mostrar un cuadro de diálogo de progreso en onProgressUpdate y luego continuar su código desde onPostExecute.

+0

Gracias, suena un poco complicado para lo que parece ser una tarea trivial. "notificar cuando la vista esté lista" –

4

No soy 100% pero necesitaba saber algo similar para mi desarrollo y descubrí que onWindowFocusChanged() se llama cuando se carga la vista. No estoy seguro si eso satisface sus necesidades o no.

+0

Gracias por eso, se llama a onWindowFocusChanged una vez que los datos están allí, sin embargo, se invoca cada cambio de enfoque. Podría agregar una bandera que indicará el estado de inicio, pero no parece tan suave. Creo que esta es mi solución por ahora, ¿algún pensamiento? –

+0

oh sí, lo siento, me olvidé de agregar eso. Tengo un booleano global que utilizo para asegurarme de que sea la primera llamada de foco modificada y luego hacer lo que necesito hacer. Supongo que depende de lo que necesites hacer, pero si solo necesitas acceder a algo la primera vez que se carga la pantalla, una variable global debería arreglarlo, si no el código más elegante. – MikeIsrael

+0

Gracias de nuevo, voy a trabajar con eso;) –

Cuestiones relacionadas