【Android笔记】Androd手机拍照或从相册选取图片作为头像

  1 package zhangpgil.photo;
  2
  3 import java.io.File;
  4 import android.support.v7.app.ActionBarActivity;
  5 import android.view.View;
  6 import android.widget.Button;
  7 import android.widget.ImageView;
  8 import android.widget.Toast;
  9 import android.content.Intent;
 10 import android.graphics.Bitmap;
 11 import android.net.Uri;
 12 import android.os.Bundle;
 13 import android.os.Environment;
 14 import android.provider.MediaStore;
 15
 16 public class MainActivity extends ActionBarActivity {
 17
 18     /* 头像文件 */
 19     private static final String IMAGE_FILE_NAME = "temp_head_image.jpg";
 20
 21     /* 请求识别码 */
 22     private static final int CODE_GALLERY_REQUEST = 0xa0;
 23     private static final int CODE_CAMERA_REQUEST = 0xa1;
 24     private static final int CODE_RESULT_REQUEST = 0xa2;
 25
 26     // 裁剪后图片的宽(X)和高(Y),480 X 480的正方形。(生成bitmap貌似有时要报错?可试下把大小弄小点)
 27     private static int output_X = 480;
 28     private static int output_Y = 480;
 29
 30     private ImageView headImage = null;
 31
 32     @Override
 33     protected void onCreate(Bundle savedInstanceState) {
 34         super.onCreate(savedInstanceState);
 35         setContentView(R.layout.activity_main);
 36
 37         headImage = (ImageView) findViewById(R.id.imageView);
 38
 39         Button buttonLocal = (Button) findViewById(R.id.buttonLocal);
 40         buttonLocal.setOnClickListener(new View.OnClickListener() {
 41
 42             @Override
 43             public void onClick(View v) {
 44                 choseHeadImageFromGallery();
 45             }
 46         });
 47
 48         Button buttonCamera = (Button) findViewById(R.id.buttonCamera);
 49         buttonCamera.setOnClickListener(new View.OnClickListener() {
 50
 51             @Override
 52             public void onClick(View v) {
 53                 choseHeadImageFromCameraCapture();
 54             }
 55         });
 56     }
 57
 58     // 从本地相册选取图片作为头像
 59     private void choseHeadImageFromGallery() {
 60         Intent intentFromGallery = new Intent();
 61         // 设置文件类型
 62         intentFromGallery.setType("image/*");
 63         intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);
 64         startActivityForResult(intentFromGallery, CODE_GALLERY_REQUEST);
 65     }
 66
 67     // 启动手机相机拍摄照片作为头像
 68     private void choseHeadImageFromCameraCapture() {
 69         Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 70
 71         // 判断存储卡是否可用,存储照片文件
 72         if (hasSdcard()) {
 73             intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri
 74                     .fromFile(new File(Environment
 75                             .getExternalStorageDirectory(), IMAGE_FILE_NAME)));
 76         }
 77
 78         startActivityForResult(intentFromCapture, CODE_CAMERA_REQUEST);
 79     }
 80
 81     @Override
 82     protected void onActivityResult(int requestCode, int resultCode,
 83             Intent intent) {
 84
 85         // 用户没有进行有效的设置操作,返回
 86         if (resultCode == RESULT_CANCELED) {
 87             Toast.makeText(getApplication(), "取消", Toast.LENGTH_LONG).show();
 88             return;
 89         }
 90
 91         switch (requestCode) {
 92         case CODE_GALLERY_REQUEST:
 93             cropRawPhoto(intent.getData());
 94             break;
 95
 96         case CODE_CAMERA_REQUEST:
 97             if (hasSdcard()) {
 98                 File tempFile = new File(
 99                         Environment.getExternalStorageDirectory(),
100                         IMAGE_FILE_NAME);
101                 cropRawPhoto(Uri.fromFile(tempFile));
102             } else {
103                 Toast.makeText(getApplication(), "没有SDCard!", Toast.LENGTH_LONG)
104                         .show();
105             }
106
107             break;
108
109         case CODE_RESULT_REQUEST:
110             if (intent != null) {
111                 setImageToHeadView(intent);
112             }
113
114             break;
115         }
116
117         super.onActivityResult(requestCode, resultCode, intent);
118     }
119
120     /**
121      * 裁剪原始的图片
122      */
123     public void cropRawPhoto(Uri uri) {
124
125         Intent intent = new Intent("com.android.camera.action.CROP");
126         intent.setDataAndType(uri, "image/*");
127
128         // 设置裁剪
129         intent.putExtra("crop", "true");
130
131         // aspectX , aspectY :宽高的比例
132         intent.putExtra("aspectX", 1);
133         intent.putExtra("aspectY", 1);
134
135         // outputX , outputY : 裁剪图片宽高
136         intent.putExtra("outputX", output_X);
137         intent.putExtra("outputY", output_Y);
138         intent.putExtra("return-data", true);
139
140         startActivityForResult(intent, CODE_RESULT_REQUEST);
141     }
142
143     /**
144      * 提取保存裁剪之后的图片数据,并设置头像部分的View
145      */
146     private void setImageToHeadView(Intent intent) {
147         Bundle extras = intent.getExtras();
148         if (extras != null) {
149             Bitmap photo = extras.getParcelable("data");
150             headImage.setImageBitmap(photo);
151         }
152     }
153
154     /**
155      * 检查设备是否存在SDCard的工具方法
156      */
157     public static boolean hasSdcard() {
158         String state = Environment.getExternalStorageState();
159         if (state.equals(Environment.MEDIA_MOUNTED)) {
160             // 有存储的SDCard
161             return true;
162         } else {
163             return false;
164         }
165     }
166 }
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:layout_height="match_parent"
 4     android:orientation="vertical" >
 5
 6     <ImageView
 7         android:id="@+id/imageView"
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:src="@drawable/ic_launcher" />
11
12     <Button
13         android:id="@+id/buttonLocal"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:text="本地相册选取头像" />
17
18     <Button
19         android:id="@+id/buttonCamera"
20         android:layout_width="wrap_content"
21         android:layout_height="wrap_content"
22         android:text="手机拍照选取头像" />
23
24 </LinearLayout>

参考原文:http://www.open-open.com/lib/view/open1428569177447.html

时间: 2024-10-13 08:52:42

【Android笔记】Androd手机拍照或从相册选取图片作为头像的相关文章

android手机拍照或选取相册里面的图片

three.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"

Android设置头像,手机拍照或从本地相册选取图片作为头像

 [Android设置头像,手机拍照或从本地相册选取图片作为头像] 像微信.QQ.微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 1,让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像. 2,让用户启动手机的相机拍照,拍完照片后裁剪,然后作为头像. 我现在写一个简单的完整代码例子,说明如何在Android中实现上述两个头像设置功能. MainActivity.java文件: package zhangpgil.photo; import java.io.F

部分Android或IOS手机拍照后照片被旋转的问题

1.我们平时手机拍的照片,传到电脑后,使用Photoshop或者其它图片浏览工具打开时,发现图片是被转过的.可是Windows上预览却是正的.其实原因是部分Android或IOS手机拍照后,将图片角度信息存到了Exif信息中.我们只需要读取出来,再做相应的重绘,即可. 2.代码送上. class ImageNormal { public void NormalImageDegree(string imagePath) { var bitmap = (Bitmap)Bitmap.FromFile(

Android开发之手机拍照功能的实现(源代码分享)

Android系统里调用手机拍照的功能有两种方法一种直接调用手机自带的相机另一种就是使用自己做的拍照应用.比如Camera360 一款于各操作系统都有的的功能强大的手机摄影软件:能拍摄出不同风格,不同特效的照片,同时具有云服务和互联网分享功能,全球用户已经超过2.5亿.现在专门的开发一款手机摄影软件肯定没多大意义,已经比不过这些前辈了,我们只需学会如何调用手机自带的摄像机完成拍照并把照片获取过来,为用户提供上传头像,发表图文微博,传送图片的功能即可.完成上述的功能十分的简单,甚至不需要在清单文件

Android大图片裁剪之手机拍照和从相册中选择注意点

Intent("com.android.camera.action.CROP"):中data.MediaStore.EXTRA_OUTPUT以及return-data data:Parcelable类型 传入的数据类型 MediaStore.EXTRA_OUTPUT:Uri类型 自定义裁切输出的图片存储位置 return-data:boolean类型 是否有返回数据(有返回值,返回Bitmap,没有返回值是因为使用Uri与File相似,所有的操作如裁剪将数据都保存在了Uri中,已经持有

ng-cordova 手机拍照或从相册选择图片

1.需求描述 实现一个调用摄像头拍照,或者直接打开本地图库选择照片,然后替换App中图片的功能 2.准备 1) 安装ng-cordova 进入到ionic工程目录,使用bower工具安装, bower install ngCordova 然后将ng-cordova.js 或者 ng-cordova.min.js 添加到index.html 中的 cordova.js 引用之前 ... <script src="lib/ngCordova/dist/ng-cordova.js"&g

Android上传图片之调用系统拍照和从相册选择图片

Android上传图片之调用系统拍照和从相册选择图片 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文,现在是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了.原因呢?当然是自己的原因,其实是有很多时间来些博客的,但是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 现在几乎应用都会用到上传图片的功能,而要上传图片,首先得选择图片,本文不针对如何上传图片到服务器(每个项目与服务器交互的方式不同,因

android使用webview上传文件(支持相册和拍照),支持最高6.0安卓系统(改进版)

首先学习 http://blog.csdn.net/woshinia/article/details/19030437 对input file的支持 1.注意 mUploadMessage.onReceiveValue(Uri.parse("")); 必须得到调用,无论用户是否选了图,否则会出现再点击不响应的情况 2.上面的参考由于比较老,不适用于安卓5.0系统,因为谷歌5.0以后对webkit做了改动, 相关API发生了变化,那么5.0的需要参考http://blog.csdn.ne

android打开相册选取图片或打开相机拍照并进行裁剪

首先是打开本地相册选取图片: Intent albumIntent = new Intent(Intent.ACTION_PICK);//打开系统的相册 albumIntent.setType("image/*"); startActivityForResult(albumIntent, 0x1004); 选取完图片后在onActivityResult编写取数据的操作: @Override protected void onActivityResult(int requestCode,