SetImageBitmap не имеет видимого эффекта

У меня есть массив байтов, который содержит изображение, извлеченное из сети. Я лениво загружаю их в свой пользовательский интерфейс (или я пытаюсь как минимум: D) использовать Bitmapfactory, BitmapDrawable и setImageDrawable. вот мой код:

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

здесь используется XML

<?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>

Я добавил "android: src...", чтобы проверить, видимо ли это изображение, и это так. Единственная проблема в том, что я не могу ее изменить! Я попробовал setImageBitmap, используя только растровое изображение, которое я создал, и попытался setimageDrawable создать BitmapDrawable, но никаких эффектов вообще. нет ошибок, нет ничего. Пожалуйста, где ошибка? спасибо

Ответ 1

Я предполагаю, что вы не делаете этого в правильной нити. Вы можете проверить это, вызвав этот код, затем повернув экран (или открыв физическую клавиатуру, если у вас есть один из этих телефонов). Это приведет к обновлению пользовательского интерфейса.

В любом случае, в каком контексте вы это называете? Фоновый поток? Вы хотите обновить пользовательский интерфейс в потоке пользовательского интерфейса, или вам придется называть что-то вроде "invalidate" в представлении, чтобы заставить его заново провести повторную ничью.

Ответ 2

Это проблема с памятью, вы можете исправить ее, используя этот метод, как показано ниже, Опция "inSampleSize" возвращает меньшее изображение и сохраняет память. Вы можете просто вызвать это в 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;
}

Ответ 3

Решение ниже работало для меня. Я использовал библиотеку 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/

Вызовите функцию ниже, чтобы установить растровое изображение в ImageView

bitmapIntoImageView(imageView, bitmap, MainActivity.this)