通过点击相册或照相机把相册或照相机拍照所得的图片设置为头像,其中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中设置权限: