我可以使用毕加索库从文件系统加载图像吗?
我使用 startActivityForResult让用户从他的图库中选择一张照片,然后希望显示选定的图像。
startActivityForResult
我已经有了获得图像文件系统 Uri的工作代码,但是无法让 Picasso.load()方法工作。
Uri
Picasso.load()
你可以的。
试试:
Picasso.with(context).load(new File(YOUR_FILE_PATH)).into(imageView);
剪辑
也可以调用 .load(YOUR_URI)。
.load(YOUR_URI)
当然可以,其实很简单:
File f = new File("path-to-file/file.png");
或者
File f = new File(uri); Picasso.get().load(f).into(imageView);
还有
Picasso.get().load(uri).into(imageView);
工程
查看源代码我还发现,您可以从文件系统加载的图像添加 file:字符串前缀到您的图像路径。例如:
file:
file:path/to/your/image
此外,当使用 startActivityForResult 时,您将得到如下内容:
Uri imageContent = data.getData();
然后,您可以直接调用 Picasso.with(getContext()).load(imageContent.toString).into(imageView);,而不需要创建 Cursor并查询图像路径。
Picasso.with(getContext()).load(imageContent.toString).into(imageView);
Cursor
基本上我们需要三样东西,Context,image´s path和 ImageView容器
Context
image´s path
ImageView
旧版毕加索 :
Picasso.with(context).load("/files/my_image.jpg").into(myImageView);
毕加索的新版本 :
Picasso.get().load("/files/my_image.jpg").into(myImageView);
但我们可以利用更多的选择:
.resize(20, 20) .centerCrop() .placeholder(R.drawable.user_placeholder) .error(R.drawable.user_placeholder_error)
等等。
更多信息: Http://square.github.io/picasso/
试试这个:
Picasso.with(context) .load("file://"+path) // Add this .config(Bitmap.Config.RGB_565) .fit().centerCrop() .into(imageView);
对我来说很完美。
> Picasso.get().load(R.drawable.landing_screen).into(imageView1); > Picasso.get().load("file:///android_asset/DvpvklR.png").into(imageView2); > Picasso.get().load(new File(...)).into(imageView3);
如果有人想对 Kotlin 这么做,那就是..。
//变量
private lateinit var addImage: ImageView // set the id of your ImageView private lateinit var imageUri: Uri
//打开画廊以选择图像
val gallery = Intent() gallery.type = "image/*" gallery.action = Intent.ACTION_GET_CONTENT startActivityForResult(Intent.createChooser(gallery, "Select picture"), PICK_IMAGE)
//下一个
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == PICK_IMAGE && resultCode == RESULT_OK) { imageUri = data?.data!! try { Picasso.get() .load(imageUri) .into(addImage) } catch (e: Throwable) { e.printStackTrace() } } }
这就够了。