拍照相册选择剪裁

添加jar包picasso-2.5.2.jar

1.MianActivity
private Uri imageUri;
private int from = -1;

在onCreate中添加
initViews();
private void initViews() {
    photoList = new ArrayList<>();
    photoList.add("拍照");
    photoList.add("从相册中选择");
}
private void dialogListShow(final int i) {
    View photoView = View.inflate(MyZiliaoActivity.this, R.layout.item_listview_dialog, null);//填充ListView布局
    ListView listView = (ListView) photoView.findViewById(R.id.lv_item_listview_dialog);//初始化ListView控件
    listView.setAdapter(new DialogListViewAdapter(MyZiliaoActivity.this, photoList));//ListView设置适配器
    final AlertDialog dialog2 = new AlertDialog.Builder(MyZiliaoActivity.this)
            .setView(photoView)//在这里把写好的这个listview的布局加载dialog            .create();
    dialog2.show();
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//响应listview中的item的点击事件

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                long arg3) {
            // TODO Auto-generated method stub
            TextView tv = (TextView) arg1.findViewById(R.id.tv_item_listview_dialog_text);//取得每条item中的textview控件
            String aiche = tv.getText().toString();
            if ("拍照".equals(aiche)) {
                File outputImage = new File(getExternalCacheDir(),
                        "output_image"+i+".jpg");
                try {
                    if (outputImage.exists()) {
                        outputImage.delete();
                    }
                    outputImage.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (Build.VERSION.SDK_INT >= 24) {
                    imageUri = FileProvider.getUriForFile(MyZiliaoActivity.this,
                            "com.example.administrator.ydxcfwpt.fileprovider", outputImage);
                } else {
                    imageUri = Uri.fromFile(outputImage);
                }
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                from = i;
                startActivityForResult(intent, TAKE_PHOTO);
            } else if ("从相册中选择".equals(aiche)) {
                Intent intent = new Intent("android.intent.action.GET_CONTENT");
                intent.setType("image/*");
                from = i;
                startActivityForResult(intent, CHOOSE_PHOTO);
            }
            dialog2.dismiss();
        }
    });
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case TAKE_PHOTO:
            if (resultCode == RESULT_OK) {
                beginCrop(imageUri,from);
            }
            break;
        case CHOOSE_PHOTO:
            if (resultCode == RESULT_OK) {
                if (Build.VERSION.SDK_INT >= 19) {
                    handleImageOnKatKit(data);
                } else {
                    handleImageBeforKatKit(data);
                }
            }
            break;
        case Crop.REQUEST_PICK:
            if (resultCode == RESULT_OK) {
                beginCrop(data.getData(),from);
            }
            break;
        case Crop.REQUEST_CROP:
            handleCrop(resultCode, data);
    }
}
// 将裁剪回来的数据进行处理
private void handleCrop(int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        Uri uri = Crop.getOutput(data);
        try {
            if (from == 1) {
                iv_touxiang.setImageBitmap(null);
                touxiangFile = new File(ImageUtils.saveBitmap(MyZiliaoActivity.this, uri.getPath()));
                Uri image = Uri.fromFile(touxiangFile);
                Picasso.with(MyZiliaoActivity.this).load(image)
                        .memoryPolicy(MemoryPolicy.NO_CACHE)
                        .networkPolicy(NetworkPolicy.NO_CACHE)
                        .error(R.drawable.morentouxiang)
                        .into(iv_touxiang);
                Log.i("image", "touxiangFile=" + touxiangFile.getAbsolutePath());
            } else if (from == 2) {
                iv_zhengmian.setImageBitmap(null);
                zhengmianFile = new File(ImageUtils.saveBitmap(MyZiliaoActivity.this, uri.getPath()));
                Uri image = Uri.fromFile(zhengmianFile);
                Picasso.with(MyZiliaoActivity.this).load(image)
                        .memoryPolicy(MemoryPolicy.NO_CACHE)
                        .networkPolicy(NetworkPolicy.NO_CACHE)
                        .error(R.drawable.zhanwei)
                        .into(iv_zhengmian);
                Log.i("image", "zhengmianFile=" + zhengmianFile.getAbsolutePath());
            }else if (from == 3) {
                iv_fanmian.setImageBitmap(null);
                fanmianFile = new File(ImageUtils.saveBitmap(MyZiliaoActivity.this, uri.getPath()));
                Uri image = Uri.fromFile(fanmianFile);
                Picasso.with(MyZiliaoActivity.this).load(image)
                        .memoryPolicy(MemoryPolicy.NO_CACHE)
                        .networkPolicy(NetworkPolicy.NO_CACHE)
                        .error(R.drawable.beimian)
                        .into(iv_fanmian);
                Log.i("image", "fanmianFile=" + fanmianFile.getAbsolutePath());
            }else if (from == 4) {
                iv_shouchi.setImageBitmap(null);
                shouchiFile = new File(ImageUtils.saveBitmap(MyZiliaoActivity.this, uri.getPath()));
                Uri image = Uri.fromFile(shouchiFile);
                Picasso.with(MyZiliaoActivity.this).load(image)
                        .memoryPolicy(MemoryPolicy.NO_CACHE)
                        .networkPolicy(NetworkPolicy.NO_CACHE)
                        .error(R.drawable.shouchi)
                        .into(iv_shouchi);
                Log.i("image", "shouchiFile=" + shouchiFile.getAbsolutePath());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    } else if (resultCode == Crop.RESULT_ERROR) {
        Toast.makeText(MyZiliaoActivity.this, Crop.getError(data).getMessage(),
                Toast.LENGTH_SHORT).show();

    }
}
// 开始裁剪
private void beginCrop(Uri uri,int i) {
    Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped"+i+".jpg"));
    // start() 方法根据其的需求选择不同的重载方法
    Crop.of(uri, destination).withMaxSize(500,500).start(MyZiliaoActivity.this);
}
private void handleImageBeforKatKit(Intent data) {
    Uri uri = data.getData();
    String imagePath = getImagePath(uri, null);
    disPlayImage(imagePath);
}

@TargetApi(19)
private void handleImageOnKatKit(Intent data) {
    String imagePath = null;
    Uri uri = data.getData();
    if (DocumentsContract.isDocumentUri(MyZiliaoActivity.this, uri)) {
        //  如果是Document类型的uri,则通过Document  Id处理
        String docId = DocumentsContract.getDocumentId(uri);
        if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
            String id = docId.split(":")[1];
            String selection = MediaStore.Images.Media._ID + "=" + id;
            imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
        } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
            Uri contentUri = ContentUris.withAppendedId(Uri.parse(
                    "content://downloads/public/_downloads"), Long.valueOf(docId));
            imagePath = getImagePath(contentUri, null);
        }
    } else if ("content".equalsIgnoreCase(uri.getScheme())) {
        //如果是content类型的uri,则使用普通方式处理
        imagePath = getImagePath(uri, null);
    } else if ("file".equalsIgnoreCase(uri.getScheme())) {
        //如果是file类型的uri,则直接获取图片路径即可
        imagePath = uri.getPath();
    }
    disPlayImage(imagePath);
}

private void disPlayImage(String imagePath) {
    if (imagePath != null) {
        Uri uri = Uri.fromFile(new File(imagePath));
        beginCrop(uri,from);
    } else {
        Toast.makeText(MyZiliaoActivity.this, "图片选取失败", Toast.LENGTH_SHORT).show();
    }
}
private String getImagePath(Uri uri, String selection) {
    String path = null;
    //通过uriselection来获取图片的真是路径
    Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        }
        cursor.close();
    }
    return path;
在点击事件中添加方法
 
 
dialogListShow(1)

猜你喜欢

转载自blog.csdn.net/ydc0128/article/details/80895056