android 头像选择以及裁剪
2014-07-04 18:07
204 查看
一、布局申明
二、Activity中代码
三、Activity回调方法
四、工具类
<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); private File headFile; 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); if(resultCode == RESULT_OK) { switch (requestCode) { case BitmapUtil.activity_result_camara_with_data: // 拍照 try { if (bitmapUtil.tempFile != null) { bitmapUtil.cropImageByCamera(); } } catch (Exception e) { e.printStackTrace(); } break; case BitmapUtil.activity_result_cropimage_with_data: try { if (bitmapUtil.tempFile != null) { headFile = bitmapUtil.tempFile; Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(headFile)); headImageView.setImageBitmap(bitmap); } } catch (Exception e) { e.printStackTrace(); } break; } } }
四、工具类
public class BitmapUtil { public final static int activity_result_camara_with_data = 1006; public final static int activity_result_cropimage_with_data = 1007; public File tempFile; private Activity activity; public BitmapUtil(Activity activity) { super(); this.activity = activity; } /** * 照相获取图片 */ public void selectPicFromCamera() { // if (!CommonUtils.isExitsSdcard()) { // Toast.makeText(activity, "SD卡不存在,不能拍照", Toast.LENGTH_SHORT).show(); // return; // } if(createNewFile()) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile)); activity.startActivityForResult(intent, activity_result_camara_with_data); } } /** * 照相获取完成图片时候裁剪图片 */ public void cropImageByCamera() { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(Uri.fromFile(tempFile), "image/*"); buildCropIntent(intent); activity.startActivityForResult(intent, activity_result_cropimage_with_data); } /** * 从图库获取图片 */ public void selectPicFromLocal() { Intent intent; if (Build.VERSION.SDK_INT < 19) { intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); } else { intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); } if(createNewFile()) { buildCropIntent(intent); activity.startActivityForResult(intent, activity_result_cropimage_with_data); } } /** * 构建截图的intent * @param intent */ private void buildCropIntent(Intent intent) { 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("return-data", true); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", false); // no face detection intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile)); } /** * 创建新文件 * @return */ private boolean createNewFile() { if (!CommonUtils.isExitsSdcard()) { Toast.makeText(activity, "SD卡不存在", Toast.LENGTH_SHORT).show(); return false; } tempFile = new File(Environment.getExternalStorageDirectory().getPath() + "/stchat" + "/images/" + System.currentTimeMillis() + ".jpg"); if(!tempFile.getParentFile().exists()) { tempFile.getParentFile().mkdirs(); } if(!tempFile.exists()) { try { tempFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); return false; } } return true; } public static void setBitmap(ImageView view, String head_portrait) { // 设置用户头像 Bitmap bitmap = BitmapFactory.decodeFile(head_portrait); if(bitmap != null) { view.setImageBitmap(bitmap); } } }
相关文章推荐
- android从摄像头或者图库选择图片,并进行裁剪,可以用来用户头像处理
- Android选择头像(从相机-相册-截图获取),以及闪退的解决
- Android 头像选择(拍照、相册裁剪),含7.0的坑
- Android 选择并裁剪头像
- android选择系统相机拍照和系统相册,裁剪图片并保存和设置头像,适配至7.0
- Android 头像(拍照,相册)选择后裁剪功能
- Android圆形头像设置(实现相机、相册选择并裁剪)兼容6.0/7.0
- android 设置头像以及裁剪功能
- android圆形头像:相机裁剪+相册选择
- android头像选择(拍照,相册,裁剪)
- 超实用的Andoird圆形头像设置 —— 实现相机、相册选择并裁剪尽在一行代码之间(兼容Android6.0/7.0)
- Android 设置用户头像 -》拍照/相册选择+裁剪 实现
- Android开发之头像上传(包含拍照,从相册选择图片,裁剪等)
- Android之圆形头像(实现相机拍摄+相册选择+图片裁剪功能)
- android 设置头像以及裁剪功能
- android 设置头像以及裁剪功能
- Android之圆形头像(实现相机拍摄+相册选择+图片裁剪功能)
- Android实现拍照,以及从相册选择图片裁剪功能同时保存在本地
- android头像选择(拍照,相册,裁剪)
- android头像选择(拍照,相册,裁剪)