setImageBitmap没有可见的效果

我有一个字节数组,其中包含从networking中获取的图像。 我懒惰地加载他们在我的UI活动(或者我想至less: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 …”只是为了检查imageview是否可见,它是。 唯一的问题是,我不能改变它! 我已经尝试setImageBitmap,只使用我创build的位图,我试图setimageDrawable创build一个BitmapDrawable,但没有任何影响。 没有错误,没有任何东西。 请问,错误在哪里? 谢谢

Solutions Collecting From Web of "setImageBitmap没有可见的效果"

我的猜测是你没有在正确的线程中这样做。 你可以通过调用这个代码来testing,然后旋转屏幕(或打开物理键盘,如果你有其中一个电话的话)。 这将导致UI刷新。

无论如何,你在调用什么样的环境? 后台线程? 你想在UI线程中更新UI,或者你必须在View上调用“invalidate”来强制重画。

这是一个内存不足的问题,你可以使用下面的方法修复它,“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; } 

下面的解决scheme为我工作。 我使用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)