validar studio imagen ejemplo centercrop cargar asignar android

android - studio - ImageView no refresca/refleja cambios



set image view android (6)

A juzgar por el código fuente de ImageView, ImageView no volverá a cargar la imagen si llama a setImageURI con el mismo URI. Puedes intentar cambiar el URI escribiendo tu imagen en otro archivo.

Estoy usando un selector de fotos para elegir una imagen y escribirla en un archivo privado de la aplicación. La mayor parte de mi código fuente importante se muestra a continuación. Una vez que presiono un botón y realizo el primer intento de selección de imágenes, se actualiza la vista de la imagen con éxito. Sin embargo, una vez que presiono el botón de selección de imagen nuevamente (en la misma actividad), la vista de la imagen NO se actualiza, a menos que salga y reinicie la actividad. Así que sé que la imagen se guarda correctamente, pero ¿por qué no se actualizaría o actualizaría el ImageView en el diseño?

public void onResume() { super.onResume(); ImageView myImageView = (ImageView)findViewById(R.id.contact_image); if (hasImage) { myImageView.setImageURI(Uri.fromFile(getFileStreamPath(TEMP_PHOTO_FILE))); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case PHOTO_PICKED: if (resultCode == RESULT_OK) { if (data != null) { Bundle extras = data.getExtras(); if (extras != null) { hasImage = true; bmp = (Bitmap) extras.get("data"); } } } break; } } private OnClickListener mChooseImage = new OnClickListener() { @Override public void onClick(View v) { try { // Launch picker to choose photo for selected contact Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", ICON_SIZE); intent.putExtra("outputY", ICON_SIZE); intent.putExtra("scale", true); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile())); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); startActivityForResult(intent, PHOTO_PICKED); } catch (ActivityNotFoundException e) { // LOG THIS } } }; private File getTempFile() { try { if (!hasImage) { FileOutputStream fos = openFileOutput(TEMP_PHOTO_FILE, MODE_WORLD_WRITEABLE); fos.close(); } return getFileStreamPath(TEMP_PHOTO_FILE); } catch (FileNotFoundException e) { // To be logged later return null; } catch (IOException e) { // To be logged later return null; } }

Tras el resultado de la actividad, establezco la imagen URI de ImageView en este archivo.

Cuando se completa por primera vez, el ImageView cambia para reflejar esto. Sin embargo, si intento elegir la imagen nuevamente (la misma actividad), ImageView no se actualizará hasta que salga y vuelva a ingresar a la actividad. No estoy seguro de por qué sucede esto, ¿es porque intento escribirle al temp.jpg cada vez? ¿O necesito actualizar mi diseño de alguna manera para reflejar los cambios en ImageView?


ImageView no se volverá a dibujar si el "nuevo" URI es el mismo que el anterior. "View.invalidate ()" no funcionará. Para "forzar" la actualización puedes hacer:

public void onResume() { super.onResume(); ImageView myImageView = (ImageView)findViewById(R.id.contact_image); if (hasImage) { myImageView.setImageDrawable(null); // <--- added to force redraw of ImageView myImageView.setImageURI(Uri.fromFile(getFileStreamPath(TEMP_PHOTO_FILE))); } }


Para forzar el redibujado de su widget / Vista solo llame a View.invalidate();


Para mí, refrescó mi ImageView con esto

@Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_PHOTO && resultCode == RESULT_OK && data != null && data.getData() != null) { filePath = data.getData(); try { mProfilePic.setImageURI(null); mProfilePic.setImageURI(filePath); Bitmap imageBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); mProfilePic.setImageBitmap(imageBitmap); } catch (IOException e) { e.printStackTrace(); } } }


Tuve un problema similar cuando estaba usando la cámara de los dispositivos para tomar una foto y luego quería que la imageView en la pantalla original se actualizara cuando volviera a ella. La solución fue llamar a View.invalidate () en onResume ().


invalidate () no trabajado. Intenta hackear

imageView.setImageURI(null); imageView.setImageURI(newUri);