SetImageBitmap no tiene efecto visible
Tengo una matriz de bytes que contiene una imagen obtenida de la red. Estoy perezosamente cargarlos en mi actividad de interfaz de usuario (o estoy tratando de al menos: D) utilizando Bitmapfactory, BitmapDrawable y setImageDrawable. Aquí está mi código:
RelativeLayout r =(RelativeLayout) adap.getGroupView(Integer.parseInt(groupPos), false, null, null); ImageView iv = (ImageView) r.findViewById(R.id.imgGruppo); Log.w("",""+raw_img.length); Bitmap bm = BitmapFactory.decodeByteArray(raw_img, 0, raw_img.length); Drawable drawable = new BitmapDrawable(bm); Log.i("","pre setimage"); iv.setImageDrawable(drawable); //added for testing only, with no effects. //((ELA) Activity_Titoli_2.this.getExpandableListAdapter()).notifyDataSetChanged(); //ELA is my expandable list adapter Log.i("","post setimage"+bm.getRowBytes()); //just to see that i have actual data in raw_img and such
Aquí está el XML involucrado
- Cómo borrar ImageView correctamente?
- Seleccione una parte de la imagen en ImageView y obtenga los puntos finales del rectángulo seleccionado
- ¿Cómo mostrar una imagen de blob en Android?
- Propiedad marginRight de imageview no funciona
- No se muestra el problema de arrastrar y soltar de Android
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayoutTitoli2_gruppo" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textNomeGruppo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="Large Text" android:textColor="#FF0000" android:padding="14dp" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textNoteGruppo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textNomeGruppo" android:paddingLeft="14dp" android:paddingRight="14dp" android:paddingBottom="7dp" android:text="Small Text" android:textAppearance="?android:attr/textAppearanceSmall" /> <ImageView android:id="@+id/imgGruppo" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentRight="true" android:src="@drawable/icon" /> </RelativeLayout>
He añadido "android: src …" sólo para comprobar si la imagen es visible, y lo es. El único problema es que no puedo cambiarlo! He intentado setImageBitmap, utilizando sólo el mapa de bits i creado, he intentado setimageDrawable la creación de un BitmapDrawable, pero sin efectos en absoluto. Sin errores, sin nada. Por favor, ¿dónde está el error? gracias
- Obtener imagen asociada (Drawable) en ImageView android
- Cómo obtener el nombre de la imagen en java?
- Sólo el subproceso original que creó una jerarquía de vistas puede tocar sus vistas
- Establecer imagen desde android.R.drawable en vista de la imagen android
- Android.view.InflateException: al escribir una imagen personalizada
- Ampliación de ImageView TOP_CROP
- Problemas de margen de pantalla de inicio?
- Establecer margen negativo en ImageView cambia ImageView pero no Image
Mi conjetura es que usted no está haciendo esto en el hilo derecho. Puede probar esto llamando a este código, luego girando la pantalla (o abriendo el teclado físico, si tiene uno de esos teléfonos). Esto hará que la interfaz de usuario se actualice.
De todos modos, ¿en qué contexto estás llamando? Hilo de fondo? Desea actualizar la interfaz de usuario en el subproceso de interfaz de usuario, o tendrá que llamar a algo como "invalidar" en la vista para obtenerlo para forzar un re-dibujo.
Es un problema de memoria, puede corregirlo utilizando este método como se indica a continuación, La opción "inSampleSize" devolverá una imagen más pequeña y ahorrará memoria. Sólo puede llamar a esto en el ImageView.setImageBitmap
private Bitmap loadImage(String imgPath) { BitmapFactory.Options options; try { options = new BitmapFactory.Options(); options.inSampleSize = 4;// 1/4 of origin image size from width and height Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options); return bitmap; } catch (Exception e) { e.printStackTrace(); } return null; }
La siguiente solución funcionó para mí. Utilicé la biblioteca de Picasa.
private Uri getImageUri(Bitmap inImage) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = MediaStore.Images.Media.insertImage(activity.getContentResolver(), inImage, "Title", null); return Uri.parse(path); } public void bitmapIntoImageView(ImageView imageView, Bitmap bitmap, Activity activity){ Uri imageUri = getImageUri(bitmap); Picasso.with(activity).load(imageUri).into(imageView); } public void imagePathIntoImageView(ImageView imageView, String imagePath, Activity activity) { Uri imageUri = Uri.fromFile(new File(imagePath)); Picasso.with(activity).load(imageUri).into(imageView); }
Picasa: http://square.github.io/picasso/
Llame a la siguiente función para establecer el mapa de bits en ImageView
bitmapIntoImageView(imageView, bitmap, MainActivity.this)
- ¿Alguna razón para retrasar el bloqueo de una aplicación gratuita?
- Enviar y recibir SMS dentro de mi propia aplicación, no en la aplicación nativa de mensajes en android usando la API nativa de SMS