首页 > 代码库 > android 头像选择以及裁剪
android 头像选择以及裁剪
一、布局申明
<ImageView android:id="@+id/head_image" android:layout_width="80dp" android:layout_height="80dp" android:layout_centerHorizontal="true" android:background="@drawable/default_avatar" />
二、Activity中代码
private ImageView headImageView; private BitmapUtil bitmapUtil = new BitmapUtil(this);headImageView = (ImageView) findViewById(R.id.head_image); headImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new android.app.AlertDialog.Builder(RegisterActivity.this) .setTitle("头像选择") .setNegativeButton("相册选取", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); bitmapUtil.doCropPhoto(RegisterActivity.this); } }) .setPositiveButton("相机拍照", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); String status = Environment.getExternalStorageState(); if (status.equals(Environment.MEDIA_MOUNTED)) {// 判断是否有SD卡 bitmapUtil.doTakePhoto(RegisterActivity.this);// 用户点击了从照相机获取 } } }).show(); } });
三、Activity回调方法
/** * 头像选择回调 * resultCode: 正常返回-1 用户后退返回0 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.i("TAG", requestCode + " : " + resultCode); switch (requestCode) { case BitmapUtil.activity_result_camara_with_data: // 拍照 try { if(resultCode == -1) { bitmapUtil.cropImageUriByTakePhoto(RegisterActivity.this); } } catch (Exception e) { e.printStackTrace(); } break; case BitmapUtil.activity_result_cropimage_with_data: try { if(resultCode == -1) { Bitmap bitmap = bitmapUtil.decodeUriAsBitmap(RegisterActivity.this); if(bitmap != null) { headImageView.setImageBitmap(bitmap); } } } catch (Exception e) { e.printStackTrace(); } break; } }
四、工具类
import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import android.app.Activity;import android.content.ActivityNotFoundException;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Environment;import android.os.SystemClock;import android.provider.MediaStore;import android.util.Log;public class BitmapUtil { //对外公开的 public Uri photoUri; private File picFile; private Uri tempUri; public final static int activity_result_camara_with_data = http://www.mamicode.com/1006; public final static int activity_result_cropimage_with_data = http://www.mamicode.com/1007; private Context context; public BitmapUtil(Context context) { super(); this.context = context; } /** * 拍照获取图片 * */ public void doTakePhoto() { try { File uploadFileDir = new File(Environment.getExternalStorageDirectory(), "/upload"); Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (!uploadFileDir.exists()) { uploadFileDir.mkdirs(); } picFile = new File(uploadFileDir, SystemClock.currentThreadTimeMillis() + ".png"); if (!picFile.exists()) { picFile.createNewFile(); } tempUri = Uri.fromFile(picFile); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri); ((Activity) context).startActivityForResult(cameraIntent, activity_result_camara_with_data); Log.i("TAG", "photo1:" + tempUri.toString() + ",photo2:" + tempUri.getPath()); } catch (ActivityNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void doCropPhoto() { try { File pictureFileDir = new File(Environment.getExternalStorageDirectory(), "/upload"); if (!pictureFileDir.exists()) { pictureFileDir.mkdirs(); } picFile = new File(pictureFileDir, SystemClock.currentThreadTimeMillis() + ".png"); if (!picFile.exists()) { picFile.createNewFile(); } tempUri = Uri.fromFile(picFile); final Intent intent = getCropImageIntent(); ((Activity) context).startActivityForResult(intent, activity_result_cropimage_with_data); Log.i("TAG", "photo3:" + tempUri.toString() + ",photo4:"+ tempUri.getPath()); } catch (Exception e) { e.printStackTrace(); } } /** * Constructs an intent for image cropping. 调用图片剪辑程序 */ private Intent getCropImageIntent() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 100); intent.putExtra("outputY", 100); intent.putExtra("noFaceDetection", true); intent.putExtra("scale", true); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); return intent; } public void cropImageUriByTakePhoto() { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(tempUri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 100); intent.putExtra("outputY", 100); intent.putExtra("scale", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri); intent.putExtra("return-data", false); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); // no face detection ((Activity) context).startActivityForResult(intent, activity_result_cropimage_with_data); } public Bitmap decodeUriAsBitmap() { Bitmap bitmap = null; try { if(tempUri != null) { photoUri = tempUri; bitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(photoUri)); } } catch (FileNotFoundException e) { e.printStackTrace(); return null; } return bitmap; }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。