朝花夕拾-android 从手机选择图片或拍照设置头像

Demo源码位置:http://git.oschina.net/zj2012zy/Android-Demo/tree/master/AndroidDemo/headset

一般需要用户信息的好多的也需要设置用户头像,通常设置用户头像的操纵要么从手机选择一张图片,要么直接通过手机拍照进行设置。示意图如下:

另外:制作手机的动态截屏,可以使用应用宝的动态截屏功能,非常的方便。

布局文件很简单:就是两个按钮加一个imageview用来显示设置好的头像,就不说了。

核心代码为如下四个函数:

1.选择一张图片

1     public static void selectPhoto(Activity activity) {
2         Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
3         intent.setType("image/jpeg");
4         intent.putExtra("return-data", true);
5         activity.startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
6     }

2、拍照并存储

 1     public static String takePicture(Activity activity) {
 2         createDirFile(Environment.getExternalStorageDirectory().getPath() + "/zhaojie/images/");
 3         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 4         String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
 5         String path = Environment.getExternalStorageDirectory().getPath() + "/zhaojie/images/" + timeStamp + ".png";
 6         File file = createNewFile(path);
 7         if (file != null) {
 8             intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
 9         }
10         activity.startActivityForResult(intent, INTENT_REQUEST_CODE_CAMERA);
11         return path;
12     }

3、处理拍照或者是选择的照片,截取头像,其中可指定截取头像的大小。

 1     private void cropImageUri(Uri uri, int requestCode) {
 2         Intent intent = new Intent("com.android.camera.action.CROP");
 3         intent.setDataAndType(uri, "image/*");
 4         intent.putExtra("crop", "true");
 5         intent.putExtra("aspectX", 1);
 6         intent.putExtra("aspectY", 1);
 7         intent.putExtra("outputX", 320);
 8         intent.putExtra("outputY", 320);
 9         intent.putExtra("scale", true);
10         intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
11         intent.putExtra("return-data", true);
12         intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
13         intent.putExtra("noFaceDetection", true); // no face detection
14         startActivityForResult(intent, requestCode);
15     }

4、整体流程基本都是通过调用系统activity实现,代码如下

 1     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 2         super.onActivityResult(requestCode, resultCode, data);
 3         if (resultCode != RESULT_OK)
 4             return;
 5         Bitmap tempPhoto = null;
 6         switch (requestCode) {
 7             case PHOTO_PICKED_WITH_DATA: // ????????
 8                 ContentResolver cr = this.getContentResolver();
 9                 try {
10                     Uri uri = data.getData();
11                     cropImageUri(uri, PHOTO_CROP_DATA);
12                     // tempPhoto =
13                     // BitmapFactory.decodeStream(cr.openInputStream(uri));
14                     // mStepPhoto.setUserPhoto(tempPhoto);
15                 } catch (Exception e) {
16                     e.printStackTrace();
17                 }
18                 break;
19             case INTENT_REQUEST_CODE_CAMERA:
20                 tempPhoto = BitmapFactory.decodeFile(headPath);
21                 cropImageUri(Uri.fromFile(new File(headPath)), PHOTO_CROP_DATA);
22                 break;
23             case PHOTO_CROP_DATA:
24                 tempPhoto = data.getParcelableExtra("data");
25                 mHead.setImageBitmap(tempPhoto);
26                 break;
27         }
28     }

文章从简,具体实现请参考demo,欢迎留言讨论

时间: 2024-10-14 15:21:59

朝花夕拾-android 从手机选择图片或拍照设置头像的相关文章

Android 从图库选择图片,拍照图片,裁剪图片

我直接写代码了 1先来几个常亮 private static final int PHOTO_REQUEST_CAREMA = 1;// 拍照private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择private static final int PHOTO_REQUEST_CUT = 3;// 结果private static final String PHOTO_FILE_NAME = "temp_photo.jpg"

Android中获取选择图片与获取拍照返回结果差异

导语: 如今的安卓应用在选择图片的处理上大多合并使用拍照和从相册中选择这两种方式(当然这是产品dog的事,开篇跑题...) 今天在写一个这样的功能模块遇到一个尴尬的问题,同样是拍照获取图片功能,在同事的三星上跑没问题,但是在我的手机上一跑就崩(吐槽一下国产厂商对android的系统级改造真是太大,连错误日志都打不出来,还有老板啥时候给我配个测试机呗),下面是在某型手机上测试的报错结果 错误报告: 10-21 17:41:43.634: E/AndroidRuntime(32683): FATAL

android选择图片或拍照图片上传到服务器(包括上传参数)

From:http://blog.csdn.net/springsky_/article/details/8213898具体上传代码: 1.选择图片和上传界面,包括上传完成和异常的回调监听 [java] view plaincopy package com.spring.sky.image.upload; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.app.

android 之 webView 显示h5 执行选择图片或者拍照功能

开发工具是 android studio SDK版本是 4.3实现过程基本是这样h5中调用手机选择文件图片的代码是: <input accept="image/*" capture="camera" id="imgFile" name="imgFile" type="file"> 然后给webView 设置WebChromeClient WebChromeClient 主要处理解析,渲染网页等浏

android 选择图片 剪裁 拍照 兼容所有版本的代码

前言,版本兼容问题主要是由于4.4以前和4.4以后的Uri的格式不同所造成的错误 资料 Android 4.4从图库选择图片,获取图片路径并裁剪 1.拍照 和选择图片 ①选择图片 1 intent = new Intent(Intent.ACTION_GET_CONTENT); 2 intent.setType("image/*"); 3 startActivityForResult(intent, GALLERY_REQUEST_CODE);   ②拍照 1 intent = new

android 选择图片或拍照时旋转了90度问题

由于前面的博文中忽略了点内容,所以在这里补上,下面内容就是解决拍照或者选择图片显示的时候图片旋转了90度或者其他度数问题,以便照片可以正面显示:具体如下: 首先直接看上面博文下的拍完照或者选完图后处理部分: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case 1: if (data != null) { // 取得返

第三讲 ------- 从系统中选择图片(拍照或从相册中取)

从系统中取图片这个是写安卓非常常见的一个功能,但是很多时候我们每次我们都去写一个还是比较麻烦的. 下面我就介绍我写的一个已经封装好的一个类,先看截图 从截图上看,功能很清晰,点击获取图片按钮,出来一个半透明的界面,具有用相机拍照获取图片和从相册中选择两种途径去获取图片. 看完截图直接上代码 package com.yixuan; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutput

Android自定义ViewGroup (选择照片或者拍照)

教你搞定Android自定义ViewGroup http://www.jianshu.com/p/138b98095778 字数1794 阅读7030 评论8 喜欢37 上一篇我们介绍了Android中自定义View的知识,并实现了一个类似Google彩虹进度条的自定义View,今天我们将进一步学习如何去自定义一个ViewGroup. ViewGroup 我们知道ViewGroup就是View的容器类,我们经常用的LinearLayout,RelativeLayout等都是ViewGroup的子

Android获取本地相册图片、拍照获取图片

需求:从本地相册找图片,或通过调用系统相机拍照得到图片. 容易出错的地方: 1,当我们指定了照片的uri路径,我们就不能通过data.getData();来获取uri,而应该直接拿到uri(用全局变量或者其他方式)然后设置给imageView imageView.setImageURI(uri); 2,我发现手机前置摄像头拍出来的照片只有几百KB,直接用imageView.setImageURI(uri);没有很大问题,但是后置摄像头拍出来的照片比较大,这个时候使用imageView.setIm