¿Cómo saber cuándo ImageView termina de cargar la imagen?

Tengo una Actividad que carga un ImageView personalizado ( https://github.com/MikeOrtiz/TouchImageView/blob/master/src/com/example/touch/TouchImageView.java). Dentro de onCreate, uso setImageBitmap para mostrar una imagen enorme (4Mb...).

El problema es que esta actividad tarda 4 segundos en mostrarse, pero no hay ningún método de bloqueo que pueda colocar en una AsyncTask. Lo que quiero decir es que todo mi código de actividad se ejecuta, pero la actividad solo aparece cuando se carga la imagen y no sé cuándo termina.

Lo que quiero hacer es mostrar un ProgressDialog mientras la actividad lo carga y lo muestra cuando termina.

Cómo puedo resolver esto ? Aquí hay algo de código.

Espero que entiendas mi problema, es bastante difícil de explicar. Gracias !

carta.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parentLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<loki.test.lokitest.affichage.TouchImageView 
    android:id="@+id/image"
    android:src="@drawable/loading"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

<Button 
    android:id="@+id/bouton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="@string/textBouton"/>


</RelativeLayout>

CarteActivity.java (El que tarda 4 segundos)

public class CarteActivity extends Activity implements OnClickListener{

private Group groupe;
private String android_id;
private ConnexionServeur serveur;
private TouchImageView vue;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    Log.d("Loki","onCreate");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.carte);

    findViewById(R.id.bouton).setOnClickListener(this);

    vue = ((TouchImageView)findViewById(R.id.image));
    vue.setImageBitmap(Singleton.getInstance().getImage());

    groupe = Singleton.getInstance().getGroupe();
    android_id = Singleton.getInstance().getAndroid_id();
    serveur = Singleton.getInstance().getServeur();

    if(groupe != null)
            groupe.afficherGroupe(vue);

    }
}

EDITAR : La imagen se carga con :

image = BitmapFactory.decodeResource(context.getResources(), R.drawable.myImage);

Pero no creo que este sea este código que lleva tiempo, ya está hecho cuando uso setImageBitmap. No puedo entender qué toma tanto tiempo, pero me pregunto si es un método al que puedo acceder.

preguntado el 03 de mayo de 12 a las 16:05

¿Puedes publicar el código que se utiliza para cargar la imagen? El código en la función getImage(). -

@Oyashiro publica la solución que encontraste:

1 Respuestas

  • Hacer que el contenedor superior Layout xml (Top RelativeLayout) lleve dos elementos

    1 Barra de progreso: con Visibilidad establecida en Visible. Hazlo grande y en el centro.

    2 Diseño relativo: todo el cuerpo del contenido. Hazlo invisible primero. Estará debajo de la barra de progreso y llenará toda la pantalla tanto en altura como en ancho.

  • En oncreate setContentView y luego inicia una AysncTask que carga la vista de imagen en doInBackground. En su postExecute, hace que el cuerpo del contenido sea visible y la barra de progreso sea invisible. Se llamará a Postexecute solo después de que se complete la carga

Espero que esta ayuda y usted puede traducir todo esto en código.

contestado el 03 de mayo de 12 a las 16:05

Gracias por tu respuesta. Tu idea es genial y la probé, pero no resuelve el problema. No tengo un "código de bloqueo", por lo que postExecute se ejecuta muy rápidamente y, como la actividad aún no se muestra, la pantalla se congela. - Oyashiro

para verificar, haga que onCreate ejecute setContentView Only. pon todo lo demás en doInbackground. y la interfaz de usuario cambia en onPostExecute. y en el último hacer invisible el progreso y visible el contenido. Y si esto no funciona. Sólo Dios sabe qué está pasando exactamente. Mis manos están arriba :) - Rohit Sharma

Ok, probé esto, pero todavía no funciona como quiero. Probé el mismo código en otro teléfono, y no hay demora... - Oyashiro

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.