Pasar la imagen del lienzo a un ImageView de otra actividad.

22.01.2014 10:57

La idea es pasar una imagen dibujada en un lienzo de una actividad A a otra actividad B (como Bitmap). Como no he encontrado la solución explícita en la web, he decidido publicarla y evitar pérdidas de tiempo en el futuro.

En la actividad A vamos a tener el lienzo.  Primero creamos en el fichero XML correspondiente a esta actividad nuestro botón de "Aceptar", o "Enviar". Después ponemos en las propiedades del lienzo el nombre de la siguiente función en la pestaña "onClick".

Otra opción sería añadir la línea correspondiente al botón de XML. En mi caso, quedaría así:
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="lanzarTexto"
            android:text="@string/aceptar" />

Ahora volvemos a nuestra actividad A. En ella, meteremos el siguiente código:

 public void lanzarTexto(View v) { 
 
  drawView.setDrawingCacheEnabled(true); //Para poder obtener la imagen del lienzo
  Bitmap bitmap = drawView.getDrawingCache(); //Cojo el lienzo y lo paso a formato Bitmap
  Bundle b = new Bundle(); //Creo un contenedor Bundle
  Intent i = new Intent(this, Texto.class); //Intent para pasar a la actividad Texto cuando pulse el botón
  ByteArrayOutputStream bs = new ByteArrayOutputStream(); //Creo un ByteArray y convierto el Bitmap a este formato
  bitmap.compress(Bitmap.CompressFormat.PNG, 50, bs);
  b.putByteArray("nombre", bs.toByteArray()); //Pongo el ByteArray en el Bundle con el id "nombre"
  i.putExtras(b); //y lo envío cuando pulse el botón
        startActivity(i);
 
 }


Ya sólo queda recibir la imagen de la actividad y meterla en nuestro ImageView. Abrimos la actividad B, y dentro del método onCreate, incorporamos el siguiente código:

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_texto);
 
  //RECIBIR IMAGEN DESDE MainActivity
  //Desde esta actividad, recibo el lienzo en formato ByteArray desde la actividad MainActivity con el id "nombre" (lo recibo en un contenedor bundle)
  // y decodifico a formato Bitmap. Ese Bitmap lo llevo a mi botón ImageView llamado imagebtn1
  Bundle parametros = this.getIntent().getExtras();
  ImageView previewThumbnail=(ImageView) findViewById(R.id.imagebtn1);
 
  Bitmap b = BitmapFactory.decodeByteArray(parametros.getByteArray("nombre"),0,parametros.getByteArray("nombre").length);
  previewThumbnail.setImageBitmap(b);



    }
* El imageView que crearemos en el XML de la actividad B debe llamarse imagebtn1.

Con esto, ya debe funcionar. Cuando pasamos a la actividad B, va a coger automáticamente la imagen de la actividad A.

(https://alipunto.blogspot.com.es/)