Android开发--通过相册或拍照选择头像
来源:互联网 发布:java编码方式 编辑:程序博客网 时间:2024/04/28 11:16
像一些需要显示个人资料的App中,选择并修改自己的个人头像是必须的,最近的项目中也有用到,做个笔记吧。总体的思路是,通过startActivityForResult方法,分别传递调用系统相册的Intent和调用相机拍照的Intent来做选择,之后调用Android系统中自带的图片剪裁,实现图片的剪裁并在onActivityResult方法中获取数据。下面来进行实践:
1.点击拍照的按钮,则调用系统照相机,并把自己所拍摄的照片保存则自定义路径之下
private void getPicFromCamera() {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 下面这句指定调用相机拍照后的照片存储的路径intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "test.jpg")));startActivityForResult(intent, CAMERA_REQUEST);}接下来在onActivityResult方法中处理,如果resultCode为-1则表示拍照成功,执行图片剪裁的方法(图片剪裁的方法的稍后叙述)。
case CAMERA_REQUEST:switch (resultCode) {case -1://-1表示拍照成功File file = new File(Environment.getExternalStorageDirectory()+ "/test.jpg");if (file.exists()) {photoClip(Uri.fromFile(file));}break;default:break;}break;2.点击相册,调用系统相册
private void getPicFromPhoto() {Intent intent = new Intent(Intent.ACTION_PICK, null);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");startActivityForResult(intent, PHOTO_REQUEST);}接下来在onActivityResult方法中处理,如果data不为null,则表示选取成功,执行图片剪裁的方法(图片剪裁的方法的稍后叙述)。
case PHOTO_REQUEST:if (data != null) {photoClip(data.getData());}break;3.调用系统的图片剪裁进行图片的修理
private void photoClip(Uri uri) {// 调用系统中自带的图片剪裁Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");// 设置在开启的Intent中设置显示的VIEW可裁剪intent.putExtra("crop", "true");// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX outputY 是裁剪图片宽高intent.putExtra("outputX", 150);intent.putExtra("outputY", 150);intent.putExtra("return-data", true);startActivityForResult(intent, PHOTO_CLIP);}接下来在onActivityResult方法中处理,得到处理后的数据,并显示于ImageView之上
case PHOTO_CLIP:if (data != null) {Bundle extras = data.getExtras();if (extras != null) {Log.w("test", "data");Bitmap photo = extras.getParcelable("data");mImageView.setImageBitmap(photo);}}break;附上整体
package com.example.test;import java.io.File;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener {private Button photoButton;private Button cameraButton;private ImageView mImageView;private static final int PHOTO_REQUEST = 1;private static final int CAMERA_REQUEST = 2;private static final int PHOTO_CLIP = 3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);photoButton = (Button) findViewById(R.id.main_btn_photo);cameraButton = (Button) findViewById(R.id.main_btn_camera);mImageView = (ImageView) findViewById(R.id.main_img);photoButton.setOnClickListener(this);cameraButton.setOnClickListener(this);}@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubswitch (arg0.getId()) {case R.id.main_btn_camera:getPicFromCamera();break;case R.id.main_btn_photo:getPicFromPhoto();break;default:break;}}private void getPicFromPhoto() {Intent intent = new Intent(Intent.ACTION_PICK, null);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");startActivityForResult(intent, PHOTO_REQUEST);}private void getPicFromCamera() {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 下面这句指定调用相机拍照后的照片存储的路径intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "test.jpg")));startActivityForResult(intent, CAMERA_REQUEST);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);switch (requestCode) {case CAMERA_REQUEST:switch (resultCode) {case -1://-1表示拍照成功File file = new File(Environment.getExternalStorageDirectory()+ "/test.jpg");if (file.exists()) {photoClip(Uri.fromFile(file));}break;default:break;}break;case PHOTO_REQUEST:if (data != null) {photoClip(data.getData());}break;case PHOTO_CLIP:if (data != null) {Bundle extras = data.getExtras();if (extras != null) {Log.w("test", "data");Bitmap photo = extras.getParcelable("data");mImageView.setImageBitmap(photo);}}break;default:break;}}private void photoClip(Uri uri) {// 调用系统中自带的图片剪裁Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪intent.putExtra("crop", "true");// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX outputY 是裁剪图片宽高intent.putExtra("outputX", 150);intent.putExtra("outputY", 150);intent.putExtra("return-data", true);startActivityForResult(intent, PHOTO_CLIP);}}
0 0
- Android开发--通过相册或拍照选择头像
- Android开发--通过相册或拍照选择头像
- Android开发--通过相册或拍照选择头像
- Android开发--通过相册或拍照选择头像
- 从手机相册或拍照选择头像
- android开发 通过拍照或选择本地图片并剪裁图片设置成头像
- android头像选择(拍照,相册,裁剪)
- android头像选择(拍照,相册,裁剪)
- Android 拍照或从相册设置头像
- 安卓开发-拍照或相册选择头像和运行时动态获取权限
- Android开发之头像上传(包含拍照,从相册选择图片,裁剪等)
- Android 头像选择(拍照、相册裁剪),含7.0的坑
- Android 项目更换头像(拍照和选择相册)
- Android 头像(拍照,相册)选择后裁剪功能
- Android调用系统相册或拍照实现头像更换
- Android开发——相册拍照_02.将拍照得到或相册中选择的图片显示在ImageView中
- Android 通过拍照或相册选择图片并裁剪(精简版)
- Android 通过拍照或相册选择图片并裁剪(精简版)
- 西安做包皮手术的价格贵吗?
- 浅析三层架构
- 情绪管理---学会控制情绪
- pycharm 教程(一)安装和首次使用
- 出生在商丘农村的80后的幸福童年
- Android开发--通过相册或拍照选择头像
- 导线
- OpenVPN的Linux内核版,鬼魅的残缺 part IV:Normal Method
- 用堆栈把中缀表达式转化为后缀表达式
- Head First Python(持久存储)
- 人生是一个不断觉悟的过程,成功是一种感悟。
- php soap webservice的实现
- hdu2084数塔
- 2014年12月12日