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

首先也是要调起相册

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

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

(0)

相关推荐

  • android照相、相册获取图片剪裁报错的解决方法

    这是调用相机 public static File getImageFromCamer(Context context, File cameraFile, int REQUE_CODE_CAMERA, Intent intent) { intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File fileDir = HelpUtil.getFile(context, "/Tour/user_photos"); cameraFile

  • Android实现保存图片到本地并在相册中显示

    Android中拍照保存图片到本地是常见的一种需求,之前碰到了一个问题,就是在4.4中,刷新相册会出现ANR,经过一番百度解决了这个问题. 首先是保存图片到本地 private static final String SAVE_PIC_PATH = Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED) ? Environment.getExternalStorageDirectory()

  • Android拍照和获取相册图片

    之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过. 再也不要问度娘了,再也不用一堆博客里找啊找了... ----------------------------------------------我是正文的分割线----------------------------------------------------------- 一个一个来,先说调用手机相机拍照(最简单版): cameraButton.setOnClickListener(new View

  • Android 打开相册选择单张图片实现代码

    Android 打开相册选择单张图片实现代码                 以下就是如何在应用中打开图库并选择一张图片进行应用,代码很简单,注释很详细. 实现代码: btn8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /*在Activity Action里面有一个"ACTION_GET_CONTENT"字符串常量, // 该常量让用户选择特定类型

  • android中打开相机、打开相册进行图片的获取示例

    这里介绍在Android中实现相机调取.拍照片.获取照片.存储新路径等已经打开相册.选择照片等功能 首先看一下界面,很简单 配置读取内存卡和调用照相头的功能 <!-- 使用网络权限 --> <uses-permission android:name="android.permission.INTERNET"/> <!-- 写sd卡的权限 --> <uses-permission android:name="android.permis

  • Android实现长按图片保存至相册功能

    前言:前面写了一篇reactnative的学习笔记,说reactnative的Android框架中有很多福利,确实是的,也说到了我们app中的一个把图片保存到相册的功能,好吧,还是准备写一篇博客,就当笔记了- 先上几张app的图片: 一进app就是一个进度条加载图片(我待会也会说一下进度条view跟怎么监听图片加载过程): 图片加载完毕后: 长按图片进入相册可以看到我们保存的图片: 监听图片加载的loaddingview源码(不是很难,我就直接贴代码了): package com.leo.cam

  • Android从相册选择图片剪切和上传

    本文实例为大家分享了Android剪切和上传图片的具体代码,供大家参考,具体内容如下 1.从Android系统相册选择一张图片getImageFromAlbum(): /** * 从图库获得照片 */ protected void getImageFromAlbum() { isImgs = true; // MainApplication.changeSettingStateus = true; Intent intent = new Intent(Intent.ACTION_PICK); i

  • android获取相册图片和路径的实现方法

    Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题. 比如:managedQuery()现在已经被getContentResolver().query()替代了,不过它们的参数都是一样的 再比如Android4.4后Intent(Intent.ACTION_GET_CONTENT);和Intent(Intent.ACTION_OPEN_DOCUMENT);两个方法所得到的

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

    最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复杂呢,下面就简单说一下喽. 下面说两种方法分别是直接选择相册返回,另外一种为选择相册之后进行裁剪.先上效果图 (1)直接选择相册后返回 第一步就是主要跳转的相册 //在这里跳转到手机系统相册里面 Intent intent = new Intent( Intent.ACTION_PICK, android.provider.M

  • Android学习笔记--Activity中使用Intent传值示例代码

    Intent,又称为意图,是一种运行时绑定机制,它能在程序运行的过程中链接两个不同的组件(Activity.Service.BroadcastReceiver).通过Intent,程序可以向Android表达某种请求或意愿,Android会根据意愿的内容选择适当的组件来请求. 在这些组件之间的通讯中,主要是由Intent协助完成的.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,

  • Android开发实现从相册中选择照片功能详解

    本文实例讲述了Android开发实现从相册中选择照片功能.分享给大家供大家参考,具体如下: 实际效果图: 代码实现: 1. 权限配置 2. 点击事件绑定 3. 相册访问 4. 根据路径设置图片 5. 其他方法 权限 首先,现在 mainfest.xml 文件中添加以下权限: <!--获取照片权限--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <us

  • jsp实现仿QQ空间新建多个相册名称并向相册中添加照片功能

    工具:Eclipse,Oracle,smartupload.jar:语言:jsp,Java:数据存储:Oracle. 实现功能介绍: 主要是新建相册,可以建多个相册,在相册中添加多张照片,删除照片,删除相册,当相册下有照片时先删除照片才能删除相册. 因为每个相册和照片要有所属人,所以顺带有登录功能. 声明:只是后端实现代码,前台无任何样式,代码测试可行,仅供参考. 代码: 数据库连接帮助类: public class JDBCHelper { public static final String

  • IOS获取系统相册中照片的示例代码

    先来看看效果图 下面话不多少,我们直接上代码: #import "ViewController.h" @interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate> @property (weak, nonatomic) IBOutlet UIImageView *IconView; @end @implementation ViewController

  • Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例

    本文实例讲述了Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能的方法.分享给大家供大家参考,具体如下: 1.布局界面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pare

  • Android开发实现webview中img标签加载本地图片的方法

    本文实例讲述了Android开发实现webview中img标签加载本地图片的方法.分享给大家供大家参考,具体如下: 在网上查了很多教程,感觉很麻烦,各种方法,最后实践很简单,主要是两步: WebSettings webSettings=webView.getSettings(); //允许webview对文件的操作 webSettings.setAllowUniversalAccessFromFileURLs(true); webSettings.setAllowFileAccess(true)

  • Android开发实现布局中为控件添加选择器的方法

    本文实例讲述了Android开发实现布局中为控件添加选择器的方法.分享给大家供大家参考,具体如下: 在开发过程中,动态交互的一些展示效果可以通过布局中添加选择器实现,这样就可减少Activity等的代码数量,MVP开发中降低耦合性,使开发人员在写代码时只需要关注逻辑处理. 比如:一个按钮,原本背景图片为红色,字体为黑色,点击时候背景图片为黄色,字体改为白色. 这类简单效果在布局时就可以实现: <Button android:id="@+id/btn_start" android:

  • Android开发实现ScrollView中嵌套两个ListView的方法

    本文实例讲述了Android开发实现ScrollView中嵌套两个ListView的方法.分享给大家供大家参考,具体如下: 做的项目中要使用两个ListView在同一个页面上下显示,因为数据源不同,不能通过在Adapter中设置标志位去区分显示,最后只能硬着头皮做一个ScrollView嵌套两个ListView,但按正常情况是不能同时显示的,会出现上面的ListView完全显示,下面的只显示一个Item,查了一些资料终于成功了 主要有一个ListViewUtility ,代码如下: import

  • Android开发获取系统中已安装程序信息的方法

    本文实例讲述了Android开发获取系统中已安装程序信息的方法.分享给大家供大家参考,具体如下: public class AppInfoParser { private static String tag = "AppInfoParser"; public static List<AppInfo> getAppInfos(Context context){ //首先获取到包的管理者 PackageManager packageManager = context.getPa

随机推荐