Code,  Tech

Android开发:Activity间实现图片的传递

项目背景是这样的:

之前接了个Android涂鸦画板的项目,其中有个功能是在画板界面(MainActivity)完成绘图后跳转到下一个页面(SaveActivity)可以预览上个活动的绘图并将其保存到本地,如下图所示。其中就涉及到了Activity间图片传递的实现,现学现琢磨了半会儿,记录下来。

项目源码:https://github.com/froyoisLe/EasyPainting

我们知道在Activity间传递数据用Intent就很好实现,但若传递的不是纯粹的数据而是图像形式的呢?

考虑到计算机中所有形式的内容本质上还是01构成的数据,因此可在传递图片内容时,Intent携带表示这张图的数据,而在需要显示时将getIntent数据转为图片形式。于是查找Bitmap、Drawable与Matrix矩阵间的转换方法,可以参考下面这篇文章:

Android开发——Bitmap,byte[],Drawable相互转化

首先,定义一个实现Bitmap转byte[]的方法bitmap2Bytes():

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

定义监听跳转到保存页(SaveActivity)按钮的方法如下:

    private void save() {
        done = findViewById(R.id.done);//找到按钮控件
        done.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                drawView.setDrawingCacheEnabled(true);//View组件显示的内容可以通过cache机制保存为Bitmap
                mBitmap = drawView.getDrawingCache();//获取绘制图像的Bitmap
                byte[] bytes = bitmap2Bytes(mBitmap);//将Bitmap转化为数组
                Intent intent = new Intent(MainActivity.this,SaveActvity.class);
                intent.putExtra("image",bytes);//intent携带图像的bytes数据跳转到预览保存页
                startActivity(intent);//启动跳转
                Log.d(TAG, "onClick: 携带图片跳转");//打印日志
                drawView.setDrawingCacheEnabled(false);//获取cache通常会占用一定的内存,不需要时禁用避免性能受影响
            }
        });
    }

在保存页活动SaveActivity的onCreate方法中进行转换:byte[]->Bitmap->Drawable,代码如下:

    Intent intent = this.getIntent();//初始化Intent
        byte[] drawing = intent.getByteArrayExtra("image");//获取传递图片的数据drawing
        mBitmap = BitmapFactory.decodeByteArray(drawing,0,drawing.length);//将byte[]形式的drawing转化为Bitmap
        mDrawable = new BitmapDrawable(mBitmap);//将Bitmap转为Drawable
        mImageView = findViewById(R.id.show_drawing);//找到显示图片的控件,绑定ID
        mImageView.setImageDrawable(mDrawable);//将转得的Drawable形式图片显示于控件中

完成。

发表评论

电子邮件地址不会被公开。 必填项已用*标注