【问题标题】:Change image on activityresult在活动结果上更改图像
【发布时间】:2017-11-19 18:53:07
【问题描述】:

我开始选择器活动

selectButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Open from"), PICK_IMAGE);
    }
});

我必须用结果更改imageview 图片,我不确定,但来自onActivityResult 的resultCode 变量具有-1 值

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICK_IMAGE) {
        //get data and change imageView
    }
}

但我不知道从Intent数据中获取数据来设置imageView的图片

【问题讨论】:

  • 使用图片加载库,例如 Glide 或 Picasso。
  • 不可能...
  • 当然可以。许多开发人员都在使用它们。
  • 这是一个学生练习,有一些规则
  • 规则应该说“使用专业人士使用的东西”。专业人士使用图像加载库,而不是重新发明轮子。

标签: android


【解决方案1】:

resultCode 中的 -1 表示操作成功。见here

您在 Intent 数据中找到的文件的路径。你可以这样访问它:

Uri uri = data.getData();

然后你可以将 ImageView 设置为这个 URI:

ImageView.setImageURI(uri);

但感谢评论和docs,不建议这样做。作为替代使用 ImageView.setImageDrawable(Drawable)ImageView.setImageBitmap(android.graphics.Bitmap),如文档中所述。

所以这里他们解释了如何使用 setImageBitmap: https://stackoverflow.com/a/4717740/6845698

这里还有如何从 Uri 中获取可绘制对象,您可以使用 setImageDrawable 进行设置: https://stackoverflow.com/a/16718935/6845698

使用哪个取决于您的需求,例如文件类型。

【讨论】:

  • setImageURI() 阻塞用于加载和解码图像的主应用程序线程。不推荐这种方法。
【解决方案2】:

-1 是RESULT_OK 的常量值,这意味着您的活动为成功完成结果而启动。

使用您的调试器中断onActivityResult 方法。检查您返回的data Intent。它应该有:

1:一个Bitmap对象,即获取到的图片或

2:一个 URI,它是图像的路径,然后您可以使用 Glide 或 Picasso 之类的东西加载。

请参阅文档中的 this section 了解更多信息。

【讨论】:

  • ACTION_GET_CONTENT 将返回一个Uri
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 2022-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
相关资源
最近更新 更多