github:https://github.com/jiangjiangwei/ImageCrop
两个Button 和一个ImageView,布局就不用写了。
点击拍照:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 下面这句指定调用相机拍照后的照片存储的路径 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Constants.PHOTONAME))); startActivityForResult(intent, Constants.TAKE_PHOTO);
点击选择图库:
// 相册中选择 Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, Constants.PICK_PHOTO);
从照相或图库返回:
if (requestCode == Constants.TAKE_PHOTO && resultCode == RESULT_OK) { Intent intent = new Intent(TouxiangActivity.this, ImageCropActivity.class); intent.putExtra("PHOTO_PATH",Constants.PHOTONAME); startActivityForResult(intent, Constants.CROP_BEAUTY); } if (requestCode == Constants.PICK_PHOTO && resultCode == RESULT_OK) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); Intent intent = new Intent(TouxiangActivity.this, ImageCropActivity.class); intent.putExtra("PHOTO_PATH",picturePath); startActivityForResult(intent, Constants.CROP_BEAUTY); }
剪切的界面:ImageCropActivity:
package com.example.administrator.taxicar.ui.activity; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import com.example.administrator.taxicar.R; import com.example.administrator.taxicar.utils.Constants; import com.example.administrator.taxicar.utils.FileUtis; import com.example.administrator.taxicar.views.CropImageView; /** * Created by Administrator on 2016/1/6. */ public class ImageCropActivity extends Activity { private Bitmap mBitmap; private String mPhotoPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_crop); Bundle b = getIntent().getExtras(); if (b != null) { mPhotoPath = b.getString("PHOTO_PATH"); } final CropImageView cropImageView = (CropImageView) findViewById(R.id.cropimageview); if (!TextUtils.isEmpty(mPhotoPath)) { try { mBitmap = BitmapFactory.decodeFile(mPhotoPath); Bitmap bm = FileUtis.scaleBitmap(mBitmap, mBitmap.getWidth() / 2, mBitmap.getHeight() / 2); mBitmap.recycle(); cropImageView.setImageBitmap(bm); } catch (Exception e) { e.printStackTrace(); } } findViewById(R.id.sure).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // 保存图片到本地 Bitmap bm = cropImageView.getCropImage(); FileUtis.saveBitmap2File(bm, Constants.FILENAME); Intent intent = getIntent(); // 将剪裁图片路径传递回去 intent.putExtra("path", Constants.FILENAME); setResult(RESULT_OK, intent); finish(); } }); } }
然后再返回,设置头像:
if (requestCode == Constants.CROP_BEAUTY && resultCode == RESULT_OK) { if (data != null) { final String path = data.getStringExtra("path"); Bitmap b = BitmapFactory.decodeFile(path); if (b != null) { ivCropImage.setImageBitmap(b); } } }