创建的一个工具类
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
/**
* Created by Administrator on 2016/7/9.
*/
public class ImageUtils {
private static final int ww = 480;
private static final int hh = 800;
private ImageUtils() {
}
private static ImageUtils instance = null;
public static ImageUtils getInstance(){
if (instance == null) {
instance = new ImageUtils();
}
return instance;
}
private void startActivityForResult(Object object,int requestCode,Intent intent){
if(object instanceof Fragment){
Fragment fragment=(Fragment)object;
fragment.startActivityForResult(intent, requestCode);
}else if(object instanceof Activity){
Activity activity=(Activity)object;
activity.startActivityForResult(intent, requestCode);
}
}
public void getCameraPic(Uri uri,Object object) {
Intent intent = new Intent();
intent.setAction("android.media.action.IMAGE_CAPTURE");
intent.addCategory("android.intent.category.DEFAULT");
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(object,Consts.CAMEAR_REQUEST,intent);
}
public void getFilePic(Object object){
Intent intent = new Intent();
intent.setAction("android.intent.action.PICK");
intent.addCategory("android.intent.category.DEFAULT");
intent.setType("image/*");
startActivityForResult(object,Consts.OPEN_PHOTO,intent);
}
public void crop(Uri uri,Object object) {
Intent intent = new Intent();
intent.setAction("com.android.camera.action.CROP");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", true);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);
intent.putExtra("outputFormat", "JPEG");
intent.putExtra("return-data", true);
startActivityForResult(object,Consts.CROP_PIC,intent);
}
public Bitmap pathToBitmap(String filePath) {
if (filePath == null) {
return null;
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
int width = options.outWidth;
int height = options.outHeight;
float scale = 1f;
if (width > ww && width > height) {
scale = width / ww;
} else if (height > hh && height > width) {
scale = height / hh;
} else {
scale = 1;
}
options.inSampleSize = (int) scale;
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeFile(filePath, options);
return bitmap;
}
public static String uriToRealPath(Context context, Uri uri) {
Cursor cursor = context.getContentResolver().query(uri,
new String[]{MediaStore.Images.Media.DATA},
null,
null,
null);
cursor.moveToFirst();
String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
return path;
}
}
可以用Activity调用也可以用Fragment的调用
★★★注意在Fragment使用onActivityResult的方法的时候,要使用fragment.startActivityForResult(),不能使用activity,不然回传的时候接受不到值
这里使用的是Fragment,有两个地方进行请求,一个剪裁(flag==0),一个不剪裁(flag==1)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Consts.CAMEAR_REQUEST) {
if(flag==0){
imageUtils.crop(Uri.fromFile(saveFile),Fragment_me.this);
}else if(flag==1){
meRelTitlebg.setBackground(new BitmapDrawable(imageUtils.pathToBitmap(saveFile.getPath())));
}
}
else if (requestCode == Consts.CROP_PIC) {
if(data!=null){
Bitmap bitmap = data.getParcelableExtra("data");
meIcon.setImageBitmap(bitmap);
}
}
else if (requestCode == Consts.OPEN_PHOTO) {
if(data!=null){
if(flag==0){
Uri uri=data.getData();
imageUtils.crop(uri,Fragment_me.this);
}else if(flag==1){
Uri uri=data.getData();
try {
String path = imageUtils.uriToRealPath(activity, uri);
meRelTitlebg.setBackground(new BitmapDrawable(imageUtils.pathToBitmap(path)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}