欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-17 10:53:52
最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复...

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

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

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

(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) 选择图片后裁剪先上图

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

首先也是要调起相册

// 使用意图直接调用手机相册
    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,源代码下载

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

上一篇:

下一篇: