前言

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

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


实现

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

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

思路还是挺简单的。以下我逐一介绍该怎么去实现。代码是死的,非常easy就能够实现。

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里面呢?额。

。这个问题问的好。之前没有想到吧。只是都一样啦,看大家详细怎么使用了。我把这个步骤封装成了一个类,使用起来就比較方便了。

下载源代码

Activity跳转时传递Bitmap对象的实现的更多相关文章

  1. Spring MVC 页面跳转时传递参数

    页面仍然使用 JSP,在跳转时如果想传递参数则需要用到类 RedirectAttributes. 首先看看如何打开一个普通页面: // 登录页面(每个页面都要独立的 Action 来支持其呈现) @R ...

  2. 微信小程序:页面跳转时传递数据到另一个页面

    一.功能描述 页面跳转时,同时把当前页面的数据传递给跳转的目标页面,并在跳转后的目标页面进行展示 二.功能实现 1. 代码实现 test1页面 // pages/test1/test1.js Page ...

  3. Activity跳转时生命周期跟踪

    1. 步骤1(打开First Activity):经过onCreate.onStart.onResume后First Activity就展现啦: 2. 步骤2(跳转至Second Activity): ...

  4. VUE:页面跳转时传递参数,及参数获取

    https://www.cnblogs.com/zhongchao666/p/9679807.html https://blog.csdn.net/mf_717714/article/details/ ...

  5. Android Activity切换(跳转)时出现黑屏的解决方法

    在两个Activity跳转时,由于第二个Activity在启动时加载了较多数据,就会在启动之前出现一个短暂的黑屏时间,解决这个问题比较简单的处理方法是将第二个Activity的主题设置成透明的,这样在 ...

  6. Android教程 -04 启动其它Activity,静态工厂设计模式传递数据

    视频建议采用超清模式观看, 欢迎点击订阅我的优酷 意图 Intent 一个应用程序肯定不只有一个界面,如何切换到其它界面,只时候就需要启动其它的Activity.启动Activity有多种方式.我在这 ...

  7. [Xcode 实际操作]九、实用进阶-(24)使用Segue(页面的跳转连接)进行页面跳转并传递参数

    目录:[Swift]Xcode实际操作 本文将演示使用Segue(页面的跳转连接)进行页面跳转并传递参数. 参照结合:[Xcode10 实际操作]九.实用进阶-(23)多个Storyboard故事板中 ...

  8. Android-Activity跳转时动画

    Activity跳转时动画,是在跳转Activity,或者在Activity结束返回 等,用到的进入效果: 第一种效果展示: 第一个Activity的代码: package liudeli.activ ...

  9. [Android]Activity跳转传递任意类型的数据、Activity为SingleTask时代替StartActivityForResult的解决方案

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4389674.html 需求:在ActivityA跳转到Acti ...

随机推荐

  1. 「OC」类的深入研究、description方法和sel

    一.类的深入研究 (一)类的本质 类本身也是一个对象,是class类型的对象,简称“类对象”. Class类型的定义: Typedef struct obj class *class; 类名就代表着类 ...

  2. 如何正确地在手机上显示图片——QImage与QPixmap完全解析

    引言 用Qt程序在手机上显示一幅图片对编程人员来说是再基础不过的一件事情了.那么先让大家看两段代码: //dangerous should not be used, cannot display ea ...

  3. app添加辅助功能时,需要注意的测试点

    最近项目里需要在辅助功能添加对应的服务,来支持对应的功能实现: 1.对用户添加app进行信息管理功能中,该app有对应的通知或信息时在app的logo上显示提示标志. 2.用户下载一款app后能够自动 ...

  4. centos7 在 vmware下的安装与配置

    我们这里选择的centos7的版本是  CentOS-7-x86_64-DVD-1511.iso 在vmware下安装,碰到两个问题: 1)安装如下界面时,会发现“开始安装”按钮是灰化的,这时需要对有 ...

  5. Treasure Exploration(二分最大匹配+floyd)

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7455   Accepted: 3 ...

  6. Winsock编程基础介绍 .

    相信很多人都对网络编程感兴趣,下面我们就来介绍,在网络编程中应用最广泛的编程接口Winsock API. 使用Winsock API的编程,应该了解一些TCP/IP的基础知识.虽然你可以直接使用Win ...

  7. PHPCMS V9.3.2用户注册模板中的一个低级Bug

    当我们下载了目前最新的PHPCMS的时候,如果我们修改了用户注册的模板,那么模板缓存就会更新,这时候就会如下 的问题: Parse error: syntax error, unexpected T_ ...

  8. BZOJ 1103: [POI2007]大都市meg( 树链剖分 )

    早上数学考挂了...欲哭无泪啊下午去写半个小时政治然后就又可以来刷题了.. 树链剖分 , 为什么跑得这么慢... ------------------------------------------- ...

  9. vsftpd安装

    原文连接:史上最详细的vsftpd配置文件讲解: http://www.9170.org/post-322.html 参考博文:centos启用ftp功能:http://os.51cto.com/ar ...

  10. CPU满格的元凶,这回是由于QTimer引起的(默认interval是0,太猛)

    timer_space = new QTimer(); qDebug() << SystemGlobal::m_app->SpaceUse; qDebug() << ti ...