Android手机拍照或选取图库图片作为头像
packagezhangpgil.photo;
importjava.io.File;
importandroid.support.v7.app.ActionBarActivity;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.ImageView;
importandroid.widget.Toast;
importandroid.content.Intent;
importandroid.graphics.Bitmap;
importandroid.net.Uri;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.provider.MediaStore;
publicclassMainActivityextendsActionBarActivity{
/*头像文件*/
privatestaticfinalStringIMAGE_FILE_NAME="temp_head_image.jpg";
/*请求识别码*/
privatestaticfinalintCODE_GALLERY_REQUEST=0xa0;
privatestaticfinalintCODE_CAMERA_REQUEST=0xa1;
privatestaticfinalintCODE_RESULT_REQUEST=0xa2;
//裁剪后图片的宽(X)和高(Y),480X480的正方形。(生成bitmap貌似有时要报错?可试下把大小弄小点)
privatestaticintoutput_X=480;
privatestaticintoutput_Y=480;
privateImageViewheadImage=null;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
headImage=(ImageView)findViewById(R.id.imageView);
ButtonbuttonLocal=(Button)findViewById(R.id.buttonLocal);
buttonLocal.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
choseHeadImageFromGallery();
}
});
ButtonbuttonCamera=(Button)findViewById(R.id.buttonCamera);
buttonCamera.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
choseHeadImageFromCameraCapture();
}
});
}
//从本地相册选取图片作为头像
privatevoidchoseHeadImageFromGallery(){
IntentintentFromGallery=newIntent();
//设置文件类型
intentFromGallery.setType("image/*");
intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intentFromGallery,CODE_GALLERY_REQUEST);
}
//启动手机相机拍摄照片作为头像
privatevoidchoseHeadImageFromCameraCapture(){
IntentintentFromCapture=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
//判断存储卡是否可用,存储照片文件
if(hasSdcard()){
intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT,Uri
.fromFile(newFile(Environment
.getExternalStorageDirectory(),IMAGE_FILE_NAME)));
}
startActivityForResult(intentFromCapture,CODE_CAMERA_REQUEST);
}
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,
Intentintent){
//用户没有进行有效的设置操作,返回
if(resultCode==RESULT_CANCELED){
Toast.makeText(getApplication(),"取消",Toast.LENGTH_LONG).show();
return;
}
switch(requestCode){
caseCODE_GALLERY_REQUEST:
cropRawPhoto(intent.getData());
break;
caseCODE_CAMERA_REQUEST:
if(hasSdcard()){
FiletempFile=newFile(
Environment.getExternalStorageDirectory(),
IMAGE_FILE_NAME);
cropRawPhoto(Uri.fromFile(tempFile));
}else{
Toast.makeText(getApplication(),"没有SDCard!",Toast.LENGTH_LONG)
.show();
}
break;
caseCODE_RESULT_REQUEST:
if(intent!=null){
setImageToHeadView(intent);
}
break;
}
super.onActivityResult(requestCode,resultCode,intent);
}
/**
*裁剪原始的图片
*/
publicvoidcropRawPhoto(Uriuri){
Intentintent=newIntent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
//设置裁剪
intent.putExtra("crop","true");
//aspectX,aspectY:宽高的比例
intent.putExtra("aspectX",1);
intent.putExtra("aspectY",1);
//outputX,outputY:裁剪图片宽高
intent.putExtra("outputX",output_X);
intent.putExtra("outputY",output_Y);
intent.putExtra("return-data",true);
startActivityForResult(intent,CODE_RESULT_REQUEST);
}
/**
*提取保存裁剪之后的图片数据,并设置头像部分的View
*/
privatevoidsetImageToHeadView(Intentintent){
Bundleextras=intent.getExtras();
if(extras!=null){
Bitmapphoto=extras.getParcelable("data");
headImage.setImageBitmap(photo);
}
}
/**
*检查设备是否存在SDCard的工具方法
*/
publicstaticbooleanhasSdcard(){
Stringstate=Environment.getExternalStorageState();
if(state.equals(Environment.MEDIA_MOUNTED)){
//有存储的SDCard
returntrue;
}else{
returnfalse;
}
}
}
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher"/> <Button android:id="@+id/buttonLocal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="本地相册选取头像"/> <Button android:id="@+id/buttonCamera" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="手机拍照选取头像"/> </LinearLayout>
以上所述就是本文的全部内容了,希望大家能够喜欢。