Activity之间传递图片(Drawable,Bitmap)

来源:互联网 发布:哪个淘宝客插件最牛 编辑:程序博客网 时间:2024/06/05 09:50

最近在做系统的Settings定制,其中Apps管理进入详情页面时,需要向详情界面传递两个参数,app包名和icon,这就遇到了一个问题,activity之间如何传递drawable?

第一种思路,将drawable图片转化成bitmap类型,使用bundle或Intent的extral域直接传递bitmap,这样做,在进入某些app的时候,程序居然直接崩了,网上百度过后,原来是因为不能直接传递大于40k的图片。

第二种思路,就是把drawable转化为bitmap,再将bitmap存储为byte数组,然后再通过Intent传递。下面是代码:

private Bitmap bitmap;   //drawable转化成bitmap的方法    private void drawableToBitamp(Drawable drawable) {                 int w = drawable.getIntrinsicWidth();                 int h = drawable.getIntrinsicHeight();                System.out.println("Drawable转Bitmap");                Bitmap.Config config =                                drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888                                 : Bitmap.Config.RGB_565;                 bitmap = Bitmap.createBitmap(w,hconfig);                 //注意,下面三行代码要用到,否在在View或者surfaceview里的canvas.drawBitmap会看不到图                 Canvas canvas = new Canvas(bitmap);                 drawable.setBounds(0, 0, w, h);                 drawable.draw(canvas);         }

bitmap转化成byte数组:

   private byte[] bitmap2Bytes(Bitmap bm){        ByteArrayOutputStream baos = new ByteArrayOutputStream();        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);        return baos.toByteArray();    }

使用Intent传递数据:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {               Intent intent=new Intent(AppsActivity.this,AppDetailActivity.class);                String pkgName = mlistAppInfo.get(position).getAppLabel();                Drawable appIcon = mlistAppInfo.get(position).getAppIcon();                String pkgName1 = mlistAppInfo.get(position).getPkgName();                drawableToBitamp(appIcon);                byte[] bytes = bitmap2Bytes(bitmap);                intent.putExtra("appIcon", bytes);                intent.putExtra("packageName",pkgName);                intent.putExtra("packageName1",pkgName1);                startActivity(intent);                    }        });

另一个Activity接收图片:

 byte[] appIcons = intent.getByteArrayExtra("appIcon");        Bitmap bitmap= BitmapFactory.decodeByteArray(appIcons,0,appIcons.length);        appIcon.setImageBitmap(bitmap);
原创粉丝点击