客户的需求都是非常怪的。我有时候在给客户做项目的时候就想骂客户是sb。可是请你相信我,等你有需求,自己变成客户的时候,给你做项目的哥哥肯定也会骂你是sb。

是这种,客户须要做一个图片上传的功能,这个图片须要裁剪。一般而言,这东西用系统自带的裁剪就搞定了。但是客户不,他要能够自由裁剪,就是长宽比不固定,想裁成什么比例就裁成什么比例,我一听,蛋都碎了。

没有办法,客户sb归sb,需求还是得照做,不然不给钱要喝西北风了。

图片裁剪的功能系统自带了,和我的需求仅仅有一点不一样,就是它是固定宽高比的,设定了宽高比就不能再改变,而我须要自由宽高比。好吧,既然仅仅有这一点不一样,那给他改改即可了。

事实上我这人是非常懒的,我早就想谷歌一下看有没有人写好的,拿来改下直接用好了。但是找了一圈,仅仅有一个哥哥自己写了一个自己定义裁剪的功能。跑了一下,基本功能能够实现,但是太Ugly了,并且不太稳定,有一些适配没有做好。想想还是自己改源代码好了,嗯,就这样。

下载gallery的源代码,抽取裁剪功能的代码,如图

这基本就好了,然后CropImage.java里面有叉叉,自己改下就好了。这个类使用了View里面的一些变量,这些变量被打上了hide标签,所以sdk应用开发是看不到,仅仅有系统编译才干够通过。这里面有非常多东西我们是不须要的,比方/*if (extras != null) {

if (extras.getString("circleCrop") != null) {

mCircleCrop = true;

mAspectX = 1;

mAspectY = 1;

}

mSaveUri = (Uri) extras.getParcelable(MediaStore.EXTRA_OUTPUT);

if (mSaveUri != null) {

String outputFormatString = extras.getString("outputFormat");

if (outputFormatString != null) {

mOutputFormat = Bitmap.CompressFormat.valueOf(

outputFormatString);

}

} else {

mSetWallpaper = extras.getBoolean("setWallpaper");

}

mBitmap = (Bitmap) extras.getParcelable("data");

mAspectX = extras.getInt("aspectX");

mAspectY = extras.getInt("aspectY");

mOutputX = extras.getInt("outputX");

mOutputY = extras.getInt("outputY");

mScale = extras.getBoolean("scale", true);

mScaleUp = extras.getBoolean("scaleUpIfNeeded", true);

mDoFaceDetection = extras.containsKey("noFaceDetection")

? !extras.getBoolean("noFaceDetection")

: true;

}

if (mBitmap == null) {

Uri target = intent.getData();

// mAllImages = ImageManager.makeImageList(mContentResolver, target,

// ImageManager.SORT_ASCENDING);

mImage = mAllImages.getImageForUri(target);

if (mImage != null) {

// Don't read in really large bitmaps. Use the (big) thumbnail

// instead.

// TODO when saving the resulting bitmap use the

// decode/crop/encode api so we don't lose any resolution.

mBitmap = mImage.thumbBitmap(IImage.ROTATE_AS_NEEDED);

}

}*/

看这里凝视掉的代码,就是你调用系统裁剪的时候要传的一些參数,我这里直接凝视掉,仅仅传一个要剪切图片的uri就能够。

然后怎么让他自由裁剪呢,看下mAspectX变量的使用,源代码里面用mAspectX和mAspectY来做宽高比计算的,我们就把他计算宽高比的地方凝视掉就好了。把mAspectX和mAspectY都设为1,然后改动几个地方:

hv.setup(mImageMatrix, imageRect, faceRect, mCircleCrop,false

/*mAspectX != 0 && mAspectY != 0*/);

这里凝视掉了最后一个条件,直接传false,就会取消宽高比限制。

if (mAspectX != 0 && mAspectY != 0) {

if (mAspectX > mAspectY) {

// 自由缩放

cropHeight = cropWidth * mAspectY ;// mAspectX;

} else {

cropWidth = cropHeight * mAspectX ;// mAspectY;

}

}

这里去掉了宽高比计算。

然后基本就完毕了。

android 壁纸 裁剪,Android图片裁剪之自由裁剪相关推荐

  1. 电脑怎么任意裁剪图片?如何自由裁剪图片?

    ​我们在查看图片时,往往会发现有些不想要的地方需要进行图片裁剪,或者是想要在生活照中单单裁剪出自己的那一部分,应该怎样自由裁剪图片呢?下面告诉大家一个可以在线裁剪图片的方法,利用我们专业的图片处理工具 ...

  2. android 壁纸服务,Android开发学习之WallPaper设置壁纸详细介绍与实例

    今天和大家分享的是关于在android中设置壁纸的方法,在android中设置壁纸的方法有三种,分别是: 1.使用wallpapermanager的setresource(int resourceid ...

  3. android 壁纸服务,Android视频壁纸的实现

    视频壁纸属于动态壁纸,所以视频壁纸就可以用Android系统提供的动态壁纸服务来实现.首先先介绍一下在实现过程中会用到的几个类. WallpaperManager Android提供的用于管理壁纸的类 ...

  4. android壁纸框架,Android仿百度壁纸客户端之搭建主框架(一)

    这是个不错的教程,自己学完了之后就拿出来分享了,本来想一个帖子写完,但是发现这样对自己写博客的效率有点出入,为了让大家看的舒服点,所以分开来写,我们先开看下百度壁纸的客户端是什么样子的 我们先来写个主 ...

  5. android壁纸选择器,Android 图片选择器

    前言 在安卓开发中经常用到修改头像功能,通常就拍照和选择相册图片两种.有很多时候还需要对图片进行裁剪.所以这个工具可以更快速完成这些功能.对于6.0权限的处理,每个人用的都不一样,所以这个工具使用的是 ...

  6. android壁纸设置,android设置壁纸 的方法

    前几天看到豌豆荚上面风景壁纸的APP 下载得挺火,闲来无事心痒痒的想写一个壁纸程序.由于是Android开发新手,忘记了一个很重要的开发步骤,就是对权限的设置.开始以为自己写的壁纸设置程序有问题,经过 ...

  7. Android壁纸隐藏,android – 壁纸设置强制关闭

    每当我尝试启动动态壁纸的设置时,我都会遇到强制关闭问题.我真的没有任何东西,所以我不确定可能导致问题的原因--这是logCat 03-17 02:13:55.262: ERROR/AndroidRun ...

  8. android壁纸居中,Android Launcher 如何实现壁纸居中

    前言         欢迎大家我分享和推荐好用的代码段~~声明         欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog ...

  9. android 自定义图片裁剪,Android图片裁剪工具封装

    笔者从零开始开发Android,而且是跳过java直接使用kotlin开发,这其中的好处是可以避开java这门传统语言诸多的潜规则,难处是相比资深Android开发者少了许多可以现用的工具库.比如An ...

  10. Android壁纸机制(Android Q与老版本对比)

    一.什么是Android壁纸? Android中,壁纸分为动态壁纸和静态壁纸两种.静态壁纸是一张图片,动态壁纸是以动画为表现形式,有的可以对用户的操作作出反应.二者表现形式看似差异很大,但是二者的本质 ...

最新文章

  1. 滴滴哆啦A梦源码解析
  2. Effective Java~35. 用实例域代替序数
  3. leetcode 61. Rotate List
  4. 11.求二叉树中节点的最大距离
  5. c语言程序进制,C语言编程:进制转换器
  6. 《汽车之家》字体反爬之论坛、问答、文章(新闻、车家号)及其评论爬取
  7. 黑群晖折腾之docker系列之迅雷远程下载
  8. java如何表格一样对齐_如何水平对齐表格? (How can I horizontally align a form?)
  9. ThinkPad笔记本无法调节亮度
  10. 实验一 关系数据库标准语言SQL
  11. COLA 架构使用规范化
  12. Oracle中的日期时间函数
  13. [架构之路-177]-《软考-系统分析师》-17-嵌入式系统分析与设计 -2- 系统分析与设计、低功耗设计
  14. 美图类App原型制作分享-Meitu
  15. 什么是敏捷性能合弄结构(APH)?
  16. JAVA图片压缩指定大小范围
  17. Scala并发编程(二)之 Akka
  18. 辐射发射测试软件,电磁兼容之辐射发射测试与整改攻略
  19. 音频基础学习二——声音的波形
  20. 鲸交所抢滩PoS 25亿美元市场,正式上线鲸矿池

热门文章

  1. CC讲坛-大脑疾病背后的秘密-许执恒
  2. R语言可视化散点图(scatter plot)图、为图中的部分数据点添加标签、ggrepel包来帮忙
  3. R语言ggplot2可视化:使用ggrepel包在线图(line plot)的尾端那个数据点添加文本标签(text label)
  4. plotly基于dataframe数据绘制股票K线图并过滤非交易时间
  5. 深度学习多变量时间序列预测:LSTM算法构建时间序列多变量模型预测交通流量+代码实战
  6. 自然语言处理NLP之BERT、BERT是什么、智能问答、阅读理解、分词、词性标注、数据增强、文本分类、BERT的知识表示本质
  7. 高通量测序技术的原理及各平台优势和实践应用的分析
  8. Fast and accurate short read alignment with Burrows-Wheeler transform
  9. Revisiting Salient Object Detection: Simultaneous Detection, Ranking, and Subitizing of Multiple Sal
  10. STM32-超级终端显示日历