概述:
虽然 Bitmap implements Parcelable ,支持intent来传递,但是还是不建议这样传。网上有说大于40kB就会失效,但是我测试两张图片,一张是68kb的可以传,一张是152kb的就失效了,报android.os.TransactionTooLargeException异常。这说明intent对传递的数据是有大小限制的。
将bitmap转换成byte数组再传递:
Intent intent=new Intent(this,UIActivity.class); ByteArrayOutputStream baos=new ByteArrayOutputStream(); getBitmap().compress(Bitmap.CompressFormat.PNG, 100, baos); byte [] bitmapByte =baos.toByteArray(); intent.putExtra("test", bitmapByte); startActivity(intent);
byte [] bis = getIntent().getByteArrayExtra("test"); this.bitmap1 = BitmapFactory.decodeByteArray(bis, 0, bis.length);这样写可以实现图片传递,但是搞一张大图(试了一张1M的),还是蹦了,所有还是不推荐
传递图片的资源id或者路径:
Intent intent=getIntent(); Bundle bundle=new Bundle(); bundle.putInt("imageId",imageId[position] ); intent.putExtras(bundle);
这种是可行的
通过构造函数的方式来传递:
设置bitmap为参数:
new UIActivity(this , getBitmap());在目标activity里面接收:
private static Bitmap bitmap1;//必须是静态的
/** * 如果添加了有参构造,就必须添加无参构造,否则会报异常 */ public UIActivity(){} /** * 在构造函数里面启动自身activity,会先走无参构造,再走onCreate()。 * 所有bitmap1必须是静态的 */ public UIActivity(Context context , Bitmap bitmap){ LogUtils.e("bitmap = " + bitmap); this.bitmap1 = bitmap; // this.bitmap1 = bitmap.copy(Bitmap.Config.ARGB_8888, true); // this.bitmap1 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight()); // BitmapDrawable drawable = new BitmapDrawable(bitmap); // bitmap1 = drawable.getBitmap(); LogUtils.e("bitmap1 = " + bitmap1); context.startActivity(new Intent(context, UIActivity.class)); }