package com.anthony.imagepicker.imagepicker.ui; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.anthony.imagepicker.R; import com.anthony.imagepicker.imagepicker.ImagePicker; import com.anthony.imagepicker.imagepicker.bean.ImageItem; import com.anthony.imagepicker.imagepicker.view.CropImageView; import java.io.File; import java.util.ArrayList; /** * ================================================ * 作 者:jeasonlzy(廖子尧 Github地址:https://github.com/jeasonlzy0216 * 版 本:1.0 * 创建日期:2016/5/19 * 描 述: * 修订历史: * ================================================ */ public class ImageCropActivity extends ImageBaseActivity implements View.OnClickListener, CropImageView.OnBitmapSaveCompleteListener { private CropImageView mCropImageView; private Bitmap mBitmap; private boolean mIsSaveRectangle; private int mOutputX; private int mOutputY; private ArrayList<ImageItem> mImageItems; private ImagePicker imagePicker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_crop); imagePicker = ImagePicker.getInstance(); //初始化View findViewById(R.id.btn_back).setOnClickListener(this); Button btn_ok = (Button) findViewById(R.id.btn_ok); btn_ok.setText(getString(R.string.complete)); btn_ok.setOnClickListener(this); TextView tv_des = (TextView) findViewById(R.id.tv_des); tv_des.setText(getString(R.string.photo_crop)); mCropImageView = (CropImageView) findViewById(R.id.cv_crop_image); mCropImageView.setOnBitmapSaveCompleteListener(this); //获取需要的参数 mOutputX = imagePicker.getOutPutX(); mOutputY = imagePicker.getOutPutY(); mIsSaveRectangle = imagePicker.isSaveRectangle(); mImageItems = imagePicker.getSelectedImages(); String imagePath = mImageItems.get(0).path; mCropImageView.setFocusStyle(imagePicker.getStyle()); mCropImageView.setFocusWidth(imagePicker.getFocusWidth()); mCropImageView.setFocusHeight(imagePicker.getFocusHeight()); //缩放图片 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(imagePath, options); DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); options.inSampleSize = calculateInSampleSize(options, displayMetrics.widthPixels, displayMetrics.heightPixels); options.inJustDecodeBounds = false; mBitmap = BitmapFactory.decodeFile(imagePath, options); mCropImageView.setImageBitmap(mBitmap); // mCropImageView.setImageURI(Uri.fromFile(new File(imagePath))); } public int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { int width = options.outWidth; int height = options.outHeight; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { if (width > height) { inSampleSize = width / reqWidth; } else { inSampleSize = height / reqHeight; } } return inSampleSize; } @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.btn_back) { setResult(RESULT_CANCELED); finish(); } else if (id == R.id.btn_ok) { mCropImageView.saveBitmapToFile(imagePicker.getCropCacheFolder(this), mOutputX, mOutputY, mIsSaveRectangle); } } @Override public void onBitmapSaveSuccess(File file) { // Toast.makeText(ImageCropActivity.this, "裁剪成功:" + file.getAbsolutePath(), Toast.LENGTH_SHORT).show(); //裁剪后替换掉返回数据的内容,但是不要改变全局中的选中数据 mImageItems.remove(0); ImageItem imageItem = new ImageItem(); imageItem.path = file.getAbsolutePath(); mImageItems.add(imageItem); Intent intent = new Intent(); intent.putExtra(ImagePicker.EXTRA_RESULT_ITEMS, mImageItems); setResult(ImagePicker.RESULT_CODE_ITEMS, intent); //单选不需要裁剪,返回数据 finish(); } @Override public void onBitmapSaveError(File file) { } @Override protected void onDestroy() { super.onDestroy(); if (null != mBitmap && !mBitmap.isRecycled()) { mBitmap.recycle(); mBitmap = null; } } }