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


    前言

        相信大家可能都了解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里面呢?额。

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

    下载源代码

  • 相关阅读:
    广州公交百态之座位
    遍地大头者,岂尽聪明人
    小和尚
    c++中调用其他应用程序的方法(winexec shellexecute createprocess)
    MFC Is MVC
    Dialog Data Exchange
    MFC Extension dll VS Regular Dll
    Don't optimize prematurely
    Menu Basic
    Don't pessimize prematurely
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5206099.html
Copyright © 2020-2023  润新知