usar studio para libreria imagenes glide example developer como adding android android-widget

android - studio - Cambiar el contenido de ImageView causa OutOfMemoryError



picasso get() load (5)

El problema ya ha sido resuelto. en lugar de una sola línea:

((BitmapDrawable)imageView.getDrawable()).getBitmap().recycle();

agregue este código antes de actualizar el contenido de ImageView:

Drawable toRecycle= gallerypic.getDrawable(); if (toRecycle != null) { ((BitmapDrawable)gallerypic.getDrawable()).getBitmap().recycle(); } gallerypic.setImageURI(selectedimage);

Tengo una aplicación muy simple con un ImageView y un botón. El primer recurso Dibujable cargado por mi ImageView se especifica con la etiqueta "android: src" en el Diseño XML, sin embargo, en tiempo de ejecución quiero cambiar la imagen que muestra . Para hacerlo, comienzo una Actividad para el resultado y escojo una imagen de la tarjeta sd (intento enviado a MediaStore.Images.Media.EXTERNAL_CONTENT_URI). Sin embargo, cuando se selecciona la imagen, trato de actualizar el ImageView con el URI de la imagen elegida pero aparece el mensaje " java.lang.OutOfMemoryError: el tamaño del mapa de bits excede el presupuesto de la VM "

Estoy tratando de cargar las imágenes tomadas con la cámara (el tamaño de las fotografías es de aproximadamente 1.1M) de mi HTC-Hero, pero no tengo éxito, parece funcionar solo con imágenes de menos de 500 KB. Sin embargo, necesito cargar las imágenes tomadas con la cámara. . Como puedo resolver esto? Qué estoy haciendo mal. Me parece que el código es muy simple y debería funcionar.

public void onClick(View v){ Intent selectImageIntent=new Intent(Intent.ACTION_PICK , android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(selectImageIntent,1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); if(resultCode==Activity.RESULT_OK){ Uri selectedImageUri = data.getData(); Log.i(TAG,"chosen image: "+selectedImageUri.toString()); ImageView imageView = (ImageView) this.findViewById(R.id.ImageView01); imageView.setImageURI(selectedImageUri);//here I get the OutOfMemoryError imageView.invalidate(); }else{ //canceled } }

PD: eso es lo único que debería hacer la aplicación, no estoy creando otros objetos, así que me gustaría señalar que no estoy usando espacio de almacenamiento dinámico para otras cosas además de mostrar la imagen.


Esto me estaba volviendo loco.

Estoy preparando un Xoom con imágenes de pantalla completa de alta resolución y alta resolución (800x1232).

El siguiente código funcionó para mí:

public void onStop() { super.onStop(); imageView.setImageBitmap(null); }

¡¡¡Buena suerte!!!


Parece que antes de cargar un nuevo mapa de bits tuve que reciclar el mapa de bits mostrado por ImageView, ahora está funcionando sin problemas. Espero que esto ayude a alguien más, simplemente llame al siguiente método antes de configurar el nuevo contenido de ImageView.

((BitmapDrawable)imageView.getDrawable()).getBitmap().recycle();

por lo que el código ahora se ve así:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); switch(requestCode){ case INTENT_REQUEST_SELECT_IMAGE: if(resultCode==Activity.RESULT_OK){ Uri selectedImageUri = data.getData(); Log.i(TAG,"selectedImageUri.getPath()"+selectedImageUri.getPath() ); ImageView imageView = (ImageView) this.findViewById(R.id.ImageView_of_text); ((BitmapDrawable)imageView.getDrawable()).getBitmap().recycle(); imageView.setImageURI(selectedImageUri); imageView.invalidate(); }else{ //TODO define what to do in case the user canceled OCR or any other event } break; default: break; } }

Tenga en cuenta la llamada a reciclar en el mapa de bits de ImageView.


Utilicé todas las soluciones de esta publicación y muchas más, pero nadie funcionó. Finalmente, utilicé android:largeHeap="true" en el manifiesto y eso resuelve mi problema.

Espero que esto ayude a alguien.


solo use esto antes de actualizar imageview: imageView1.setImageURI (null);