当前位置: 移动技术网 > 移动技术>移动开发>Android > Android开发从相册中选取照片的示例代码

Android开发从相册中选取照片的示例代码

2019年07月24日  | 移动技术网移动技术  | 我要评论

最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复杂呢,下面就简单说一下喽。

下面说两种方法分别是直接选择相册返回,另外一种为选择相册之后进行裁剪。先上效果图

(1)直接选择相册后返回

第一步就是主要跳转的相册

 //在这里跳转到手机系统相册里面
    intent intent = new intent(
        intent.action_pick,
        android.provider.mediastore.images.media.external_content_uri);
    startactivityforresult(intent, image_request_code);

第二步就是返回的时候获取相册的路径

 @override
  protected void onactivityresult(int requestcode, int resultcode, intent data) {

    super.onactivityresult(requestcode, resultcode, data);
    //在相册里面选择好相片之后调回到现在的这个activity中
    switch (requestcode) {
      case image_request_code://这里的requestcode是我自己设置的,就是确定返回到那个activity的标志
        if (resultcode == result_ok) {//resultcode是setresult里面设置的code值
          try {
            uri selectedimage = data.getdata(); //获取系统返回的照片的uri
            string[] filepathcolumn = {mediastore.images.media.data};
            cursor cursor = getcontentresolver().query(selectedimage,
                filepathcolumn, null, null, null);//从系统表中查询指定uri对应的照片
            cursor.movetofirst();
            int columnindex = cursor.getcolumnindex(filepathcolumn[0]);
            path = cursor.getstring(columnindex); //获取照片路径
            cursor.close();
            bitmap bitmap = bitmapfactory.decodefile(path);
            iv_photo.setimagebitmap(bitmap);
          } catch (exception e) {
            // todo auto-generatedcatch block
            e.printstacktrace();
          }
        }
        break;
    }
  }

(2) 选择图片后裁剪先上图

首先也是要调起相册

// 使用意图直接调用手机相册
    intent intent = new intent(
        intent.action_pick,
        android.provider.mediastore.images.media.external_content_uri);
    // 打开手机相册,设置请求码
    startactivityforresult(intent, image_request_code);

然后这里增加了一步就是用户选择了相册之后然后再增加裁剪功能

 @override
  protected void onactivityresult(int requestcode, int resultcode, intent data) {
    if (resultcode != result_ok) {
      return;
    } else {
      switch (requestcode) {
        case image_request_code:
          resizeimage(data.getdata());
          break;

        case resize_request_code:
          if (data != null) {
            showresizeimage(data);
          }
          break;
      }
    }
    super.onactivityresult(requestcode, resultcode, data);
  }
  //这里增加裁剪
  public void resizeimage(uri uri) {
    intent intent = new intent("com.android.camera.action.crop");
    intent.setdataandtype(uri, "image/*");
    intent.putextra("crop", "true");
    intent.putextra("aspectx", 1);
    intent.putextra("aspecty", 1);
    //裁剪的大小
    intent.putextra("outputx", 150);
    intent.putextra("outputy", 150);
    intent.putextra("return-data", true);
    //设置返回码
    startactivityforresult(intent, resize_request_code);
  }
  private void showresizeimage(intent data) {
    bundle extras = data.getextras();
    if (extras != null) {
      bitmap photo = extras.getparcelable("data");
      //裁剪之后设置保存图片的路径
      string path = getfilesdir().getpath() + file.separator + image_file_name;
      //压缩图片
      imageutils.saveimage(photo, path);
      new bitmapdrawable();
      drawable drawable = new bitmapdrawable(photo);
      iv_photo.setimagedrawable(drawable);
    }
  }

ok,。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网