頭像圖片來源----照相機、相冊;利用彈出的dialog進行選擇
1、添加依賴包,添加控件,相關屬性
在app下的 build.gradle 中添加:
compile 'de.hdodenhof:circleimageview:2.1.0'
app:civ_border_width="2dp" //邊框的寬度 app:civ_border_color="@color/colorAccent" //邊框顏色
2、設置跳轉界面
1)
跳轉到拍照
private void toCamera() { //跳轉相機的action Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //判斷內存卡是否可用,可用的話就進行儲存 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile( new File(Environment.getExternalStorageDirectory(),"fileImgName.jpg"))); startActivityForResult(intent,CAMERA_REQUEST_CODE); //帶值跳轉 cirleImage_dialog.dismiss(); //彈框取消 }
2)跳轉到相冊
private void toPicture() { Intent intent=new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent,PICTURE_REQUEST_CODE); //帶值傳遞,,設定返回碼 cirleImage_dialog.dismiss(); }
3、取得圖片數據,設置顯示在圓形頭像
在Activity中重寫 onActivityResult,根據requestCode(返回碼)執行不同的操作,,裁剪後進行設置頭像
.....................
.............
......
// 圓形頭像
case R.id.civ_circle_image:
cirleImage_dialog.show();
break;
//dialog裏按鈕--拍照、相冊、取消
case R.id.btn_camera:
loadingDialog.show(); //顯示加載
toCamera();
break;
case R.id.btn_picture:
loadingDialog.show(); //顯示加載
toPicture();
break;
case R.id.btn_cancel:
cirleImage_dialog.dismiss();
break;
//快遞查詢
case R.id.tv_Courior:
startActivity(new Intent(getActivity(), CourierActivity.class));
break;
case R.id.tv_location:
startActivity(new Intent(getActivity(), LocationActivity.class));
break;
}
}
/** 跳轉到拍照 */
private void toCamera() {
loadingDialog.dismiss();
//跳轉相機的action
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//判斷內存卡是否可用,可用的話就進行儲存
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(
new File(Environment.getExternalStorageDirectory(),"fileImgName.jpg")));
startActivityForResult(intent,CAMERA_REQUEST_CODE);
cirleImage_dialog.dismiss();
}
/** 跳轉到相冊 */
private void toPicture() {
loadingDialog.dismiss();
Intent intent=new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent,PICTURE_REQUEST_CODE);
cirleImage_dialog.dismiss();
}
/** 對請求返回的結果進行操作的方法 */
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//返回碼是否有效
if(requestCode!=getActivity().RESULT_CANCELED){
switch (requestCode){
case CAMERA_REQUEST_CODE:
//相機數據---Uri類型
photoFile=new File(Environment.getExternalStorageDirectory(),
"fileImgName.jpg");
startPhotoZoom(Uri.fromFile(photoFile));
break;
case PICTURE_REQUEST_CODE:
//相冊數據
Uri uri=data.getData();
startPhotoZoom(uri);
break;
//裁剪後數據
case ZOOM_REQUEST_CODE:
//有可能捨棄
if(data!=null){
//拿到圖片設置
setImageToView(data);
//將原先的圖片捨棄回收
if(photoFile!=null){
photoFile.delete();
}
}
break;
}
}
}
/**將圖片設置到頭像 */
private void setImageToView(Intent data) {
Bundle bundle=data.getExtras();
if(bundle!=null){
Bitmap bitmap=bundle.getParcelable("data");
cirleImage_civ.setImageBitmap(bitmap);
}
}
/** 裁剪圖片---發送 */
private void startPhotoZoom(Uri uri) {
if(uri==null){
L.i("uri==null");
return;
}
//裁剪action
Intent intent=new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
//設置裁剪
intent.putExtra("crop","true");
//裁剪寬高比例
intent.putExtra("aspectX",1);
intent.putExtra("aspectY",1);
//裁剪圖片質量--大小
intent.putExtra("outputX",230);
intent.putExtra("outputY",230);
intent.putExtra("return-data",true); //數據
startActivityForResult(intent,ZOOM_REQUEST_CODE);
}
/**保存頭像信息 */
@Override
public void onDestroy() {
super.onDestroy();
//保存頭像
UtilTools.putImageToShare(getActivity(),cirleImage_civ);
}
}