如何将图像从活动 A 传递到活动 B?
Posted
技术标签:
【中文标题】如何将图像从活动 A 传递到活动 B?【英文标题】:How I can pass images from activity A to activity B? 【发布时间】:2021-10-30 12:21:32 【问题描述】:我创建了一个列表,当我单击任何项目时,我想将图像发送到另一个活动。
代码如下:
lv.onItemClickListener = object : AdapterView.OnItemClickListener
override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long)
if (position==0)
startActivity(Intent(this@HomeActivity,DisplayActivity::class.java).apply
putExtra("v1",R.drawable.h2)
)
我在B
活动中放置了一个空的ImageView
来接收传递的图像。
我应该在活动B
中写什么?
【问题讨论】:
【参考方案1】:实际上,您并没有尝试将位图传递给第二个活动,而是传递了整数可绘制资源 id。
所以,在第二个活动中尝试从意图中读取integer
.. 类似这样的......
val intent:Intent=getIntent()
val image:Int= intent.getIntExtra("v1")
【讨论】:
val resourceId:Int= intent.getIntExtra("resourceid")
我们喜欢可读的代码 ;-)
@blackapps 设置额外名称 (v1) 并将 const 资源 id 传递给另一个活动,他会关心可读性吗??【参考方案2】:
你在使用 SQLite 吗?由于图像有时太大,最好的方法是将图像保存在 SQLite 中,并通过意图传递 ID。然后,在其他活动中重新阅读。
【讨论】:
【参考方案3】:如果您尝试将 drawable 作为位图传递,请在下面的代码中尝试
/*** convert drawable to bit-map*****/
val icon = BitmapFactory.decodeResource(
this.getResources(),
R.drawable.image_one
)
/**************get byte array from bitmap ************/
val bStream = ByteArrayOutputStream()
icon.compress(Bitmap.CompressFormat.PNG, 100, bStream)
val byteArray: ByteArray = bStream.toByteArray()
/****************** pass byte array to next activity usign intent**********/
val anotherIntent = Intent(this, anotherActivity::class.java)
anotherIntent.putExtra("image", byteArray)
startActivity(anotherIntent)
/************** get drawable in another activity ***************/
val bmp: Bitmap
val byteArray = intent.getByteArrayExtra("image")
bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray!!.size)
希望它对你有用
【讨论】:
eIntent 有 1 或 2 MB 的限制。将图像作为字节流传递对于任何非平凡的使用来说都太过分了。相反,它们应该传递资源 ID(用于可绘制对象)或图像文件的 URI。以上是关于如何将图像从活动 A 传递到活动 B?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Kotlin 中将对象列表从活动 A 传递到活动 B?
将一个 mutableList 从活动 A 传递到 Kotlin 中的活动 B。