Activity跳转时传递Bitmap对象的实现

前言

    相信大家可能都了解Activity跳转时我们是可以传递参数的,比如使用Intent传递或者Bundle来传递,把当前Activity的一些信息传递给将要跳转到的新的Activity。但是不知道大家有没有想过,我们能不能传递一个Bitmap对象呢?可能有人会问为什么要传递一个Bitmap对象?好吧,因为我在开发中遇到了这样的问题才去说说这个。

    我前段时间想从网络获取图片显示在ImageView上,当显示好了之后,我希望点击ImageView可以跳转到新的Activity然后显示我点击的图片,所以我怎么得到我点击的ImageView上的图片呢?接下来就是我讲述的重点了!


实现

    开始不知道该怎么下手,百度了一段时间之后就大概明白了它的思路:

  • 得到ImageView对象上的图片,生成Bitmap对象
  • 把Bitmap对象转码成字符串
  • 把字符串存到SharedPreferences里面
  • 在新的Activity里面从SharedPreferences得到转码的字符串
  • 把字符串解码成Bitmap对象
  • 在ImageView上显示Bitmap图片

    思路还是挺简单的,下面我逐一介绍该怎么去实现,代码是死的,很容易就可以实现。

1-> 从ImageView得到Bitmap对象

Bitmap bitmap = ((BitmapDrawable)view.getDrawable()).getBitmap();

2 ->把Bitmap转码成字符串

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(CompressFormat.PNG, 50,baos);
        String imageBase64 = new String (Base64.encode(baos.toByteArray(), 0));

3->把字符串存到SharedPreferences里面

        SharedPreferences sPreferences = getSharedPreferences("share", Context.MODE_PRIVATE);
        Editor editor = sPreferences.edit();
        editor.putString("iamge", imageBase64);
        editor.commit();

4->在新的Activity里面从SharedPreferences得到转码的字符串

        SharedPreferences sPreferences = getSharedPreferences("share", Context.MODE_PRIVATE);
        String imageBase64 = sPreferences.getString("image", "");

5->把字符串解码成Bitmap对象

        byte[] byte64 = Base64.decode(imageBase64, 0);
        ByteArrayInputStream bais = new ByteArrayInputStream(byte64);
        Bitmap bitmap = BitmapFactory.decodeStream(bais);

6->在ImageView上显示Bitmap图片

view.setImageBitmap(bitmap);

总结

    步骤也就是那几步,不存在什么不懂的地方,当然如果你问我转码和解码的原理,那我只能说抱歉了,我是真的不知道。还有就是有的人可能会问,在你得到转码的字符串之后,把字符串直接传递过去不就可以了,为什么要保存在SharedPreferences里面呢?额。。这个问题问的好,之前没有想到吧,不过都一样啦,看大家具体怎么使用了,我把这个步骤封装成了一个类,使用起来就比较方便了。

下载源码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值