一、布局申明

<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 头像选择以及裁剪的更多相关文章

  1. android头像选择(拍照,相册,裁剪)

    组织头像上传时候,不兼容android6.0,并且 imageview.setImageBitmap(BitmapFactory.decodeFile(IMAGE_FILE_LOCATION));// ...

  2. Jcrop+uploadify+php实现上传头像预览裁剪

    最近由于项目需要,所以做了一个上传头像预览并且可以预览裁剪的功能,大概思路是上传的图片先保存到服务器,然后通过ajax从服务器获取到图片信息,再利用Jcrop插件进行裁剪,之后通过PHP获取到的四个裁 ...

  3. Android第三方开源图片裁剪截取:cropper

     Android第三方开源图片裁剪截取:cropper 很多app都需要裁剪截取图片作为头像.logo之类,而cropper是github上的一个针对Android平台的.第三方开源图片裁剪截取项 ...

  4. 选择Android还是选择JavaEE?

    很多同学咨询过同样的一个问题,该问题也是最备受争议的问题,那就是到底是选择Android还是选择JavaEE.下面发表一些本人的看法.       Android属于一个特有的Java技术应用,专注于 ...

  5. android单选按钮选择,RadioGroup,radioButton

    android单选按钮选择,RadioGroup,radioButton 14. 四 / android基础 / 没有评论   单选布局绑定 如何识别选择

  6. Android研究之为基于 x86 的 Android* 游戏选择合适的引擎具体解释

     摘要 游戏开发者知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中.它们所占的比例超过 90% ...

  7. MTK Android 设置-选择日期格式 [管理和组织首选项,ListPreference,CheckBoxPreference,EditTextPreference,RingtonePreference]

    ###android.preference.ListPreference的一些特性 android:key  选项的名称或键 android:title  选项的标题 android:summary  ...

  8. android选择和裁剪图像拍摄的图像

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/39994913 近期从曾经的项目中扒下来一个经常使用的模块.在这里有必要记录一下的. ...

  9. Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码

    Android项目开发中经常会遇见需要实现圆角或者圆形的图片功能,如果仅仅使用系统自带的ImageView控件显然无法实现此功能,所以通过系列文章的形式由简到繁全方位的介绍一下此功能的实现,巩固一下自 ...

随机推荐

  1. Jmeter----参数化之csv文件

    用户编码:一般不用填写,如果有中文的时候,需要填写,填写utf-8就可以 变量名词:是指的把数据保存在什么变量里面,其他的默认就好了 Http请求和用户参数设置的一样

  2. java笔试之从单向链表中删除指定值的节点

    输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针. 链表的值不能重复 构造过程,例如 1 -> 2 3 -> 2 5 -> 1 4  ...

  3. Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

    通过手动安装CDH没权限 [root@slave1 ~]# groupadd supergroup[root@slave1 ~]# hadoop fs -mkdir /tao3^C[root@slav ...

  4. 防止xss漏洞-编码转义

    用JS进行转义还是用PHP进行转义,最后存入数据库的是什么形式 比如:用户输入: <script>alrt(0);</script>那数据库里面存储的是源数据还是转以后的数据: ...

  5. Mysql优化-概述

    摘抄并用于自查笔记 为什么要优化 一个应用吞吐量瓶颈往往出现在数据库的处理速度上. 随着应用程序的使用,数据库数据逐渐增多,数据库处理压力逐渐增大. 关系型数据库的数据是存放在磁盘上,读写速度慢(与内 ...

  6. js数学公式-曲线运动

    ---勾股定理 a*a + b*b =c*c ---三角函数 正弦 : sin 余弦 : cos 正切 : tan 余切 : cot 正弦定理 a/sinA = b/sinB =c/sinC = 2r ...

  7. js实现F5键刷新后菜单保持之前状态以及监听F5页面刷新子iframe 而父页面不刷新

    利用layui实现菜单效果时,刷新页面仍回到首页状态,需要 实现iframe子页面刷新父元素不刷新,下面是代码 //刷新时禁用F5的默认事件 $(document).keydown(function ...

  8. 【JZOJ6277】矩阵游戏

    description analysis 设所有操作之后,\(f[i]\)表示\(i\)行乘的数,\(g[j]\)表示\(j\)列乘的数,那么 \[Answer=\sum^{n}_{i=1}\sum^ ...

  9. input、textarea等输入框输入中文时,拼音在输入框内会触发input事件的问题

    监听文本输入框的input事件,在拼写汉字(输入法)但汉字并未实际填充到文本框中(选词)时会触发input事件,如图: 但是在很多情况下,只需要输入到输入框的中文字符. 解决办法: 通过查阅资料得知在 ...

  10. QQ聊天机器人 Delphi代码

    QQ聊天机器人     前几日,看到杂志上有一篇关于开发QQ聊天机器人的文章.谈到了对QQ循环发送消息内容,感觉倒也很好玩,于是拿起Delphi开始了我的QQ聊天机器人之路. 首先要明白自己要做什么, ...