通过点击相册或照相机把相册或照相机拍照所得的图片设置为头像,其中java代码为:
public class MyFragment extends Fragment implements OnClickListener {
private View rootView; // Fragment 的layout文件中的根文件
private ImageView iv;
private Button btnGallery, btnCamera;
private static final String IMAGE_FILE_NAME = "faceImage.jpg";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (rootView == null) {
rootView = inflater.inflate(R.layout.fragment_me, container, false);
initView(rootView);
}
ViewGroup par = (ViewGroup) rootView.getParent();
if (par != null) {
par.removeView(rootView);
}
return rootView;
}
/*
* 查找控件并添加监听器
*/
private void initView(View rootView) {
iv = (ImageView) rootView.findViewById(R.id.me_iv_photo);
btnGallery = (Button) rootView.findViewById(R.id.gallery);
btnCamera = (Button) rootView.findViewById(R.id.camera);
btnGallery.setOnClickListener(this);
btnCamera.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.camera:
Intent intentFromCapture = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
// 在Tools添加了新的方法,判断存储卡是否可用,可用就进行存储
if (Tools.hasSdcard()) {
// 传递参数
intentFromCapture
.putExtra(MediaStore.EXTRA_OUTPUT, Uri
.fromFile(new File(Environment
.getExternalStorageDirectory(),
IMAGE_FILE_NAME)));
}
// 启动Activity,并处理结果,其中第二个参数是请求嘛,用作标识,在onActivityResult中判断使用
startActivityForResult(intentFromCapture, 0x100);
break;
case R.id.gallery:
Intent intentFromGallery = new Intent();
intentFromGallery.setType("image/*"); // 设置文件类型
intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);// 相机自带的Activity界面是固定的参数
startActivityForResult(intentFromGallery, 0x101);
break;
}
}
// 因为启动了Activity使用了startActivityForResult()
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case 0x100:// 相机
if (Tools.hasSdcard()) {
File tempFile = new File(
Environment.getExternalStorageDirectory() + "/"
+ IMAGE_FILE_NAME);
startPhotoZoom(Uri.fromFile(tempFile));
} else {
Toast.makeText(getActivity(), "未找到存储卡,无法存储照片!",
Toast.LENGTH_LONG).show();
}
break;
case 0x101: // 图库
startPhotoZoom(data.getData());
break;
case 0x102:// 剪裁图片
if (data != null) {
getImageToView(data);
}
break;
}
}
}
/*
* 保存剪裁之后的图片
*/
private void getImageToView(Intent data) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
iv.setImageBitmap(photo);
}
}
/*
* 剪裁图片的方法实现
*/
private void startPhotoZoom(Uri uri) {
Intent intent = new Intent("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", 480);
intent.putExtra("outputY", 480);
intent.putExtra("return-data", true);
startActivityForResult(intent, 0x102);
}
}
Layout布局:
<Button
android:id="@+id/gallery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="图库"
android:layout_gravity="center_horizontal"
/>
<Button
android:id="@+id/camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="相机"
android:layout_gravity="center_horizontal"/>
注意:访问相机或打开手机中相册都需要获取访问权限,Androidmanifest中设置权限: