android对图片进行裁剪,固定框大小

需求:将图片放入固定框中,通过对图片进行缩放和移动,将框内的部分裁剪出来

分析:传统的做法大概是这样,调用系统的图片裁剪界面

Intent intent = new Intent("com.android.camera.action.CROP");
        // 判断版本大于等于7.0
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            // 给目标应用一个临时授权
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        }
        intent.setDataAndType(data, "image/*");
        // crop为true时表示显示的view可以剪裁
        intent.putExtra("crop", "true");
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX,outputY 是剪裁图片的宽高
        intent.putExtra("outputX", 200);
        intent.putExtra("outputY", 200);
        uritempFile = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + "small.jpg");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile);
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

        startActivityForResult(intent, PHOTOZOOM);

但系统的东西~你懂的,没几样好用的,这个框没办法固定不变,用户可以随意调整它的大小,导致即使可以通过设置aspectX和aspectY来达到初始时的宽高比,但不符合我们的需求。更搞笑的是,它又支持设置outputX和outputY,即,不论用户如何调整框的大小,得到的图片大小永远是宽为outputX像素,高为outputY像素,假如我设置outputX和outputY都是200,结果裁剪框被用户拉成了1:2的比例,得到的图片就是被压扁的!试问,还有比这更垃圾的系统接口吗??

处理:自定义~参考了鸿洋的博客以及LargeImage的大图框架,整合成符合需求的代码

https://github.com/qugengting/ImageClipDemo/tree/master

注:获取当前大图在框中的位图方法:

public Bitmap clip() {
    //开启绘图缓存
    setDrawingCacheEnabled(true);
    //返回当前View的视图缓存
    return getDrawingCache();
}

效果图:

可以缩放调整大小:

裁剪所得:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值