这是依据翔神那篇高仿微信图像截取改的  能够先去看  Android 高仿微信头像截取 打造不一样的自己定义控件 这篇文章。

眼下还有个小问题。就是截取成圆形图片之后 会有黑色的边框填充。不知道怎么解决。知道怎么解决的大神麻烦告知一声。

改动ClipImageBorderView

	@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas); // // 计算矩形区域的宽度
// mWidth = getWidth() - 2 * mHorizontalPadding;
// // 计算距离屏幕垂直边界 的边距
// mVerticalPadding = (getHeight() - mWidth) / 2;
// mPaint.setColor(Color.parseColor("#aa000000"));
// mPaint.setStyle(Style.FILL);
// // 绘制左边1
// canvas.drawRect(0, 0, mHorizontalPadding, getHeight(), mPaint);
// // 绘制右边2
// canvas.drawRect(getWidth() - mHorizontalPadding, 0, getWidth(),
// getHeight(), mPaint);
// // 绘制上边3
// canvas.drawRect(mHorizontalPadding, 0, getWidth() -
// mHorizontalPadding, mVerticalPadding, mPaint);
// // 绘制下边4
// canvas.drawRect(mHorizontalPadding, getHeight() - mVerticalPadding,
// getWidth() - mHorizontalPadding, getHeight(), mPaint);
// // 绘制外边框
// mPaint.setColor(mBorderColor);
// mPaint.setStrokeWidth(mBorderWidth);
// mPaint.setStyle(Style.STROKE);
// canvas.drawRect(mHorizontalPadding, mVerticalPadding, getWidth() -
// mHorizontalPadding, getHeight() - mVerticalPadding, mPaint); if (rf == null || rf.isEmpty())
{
r = new Rect(0, 0, getWidth(), getHeight());
rf = new RectF(r);
} mPaint.setStyle(Style.STROKE); // 在imageview上面画入背景和 圆形
int sc = canvas.saveLayer(rf, null, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG | Canvas.ALL_SAVE_FLAG);
mPaint.setColor(Color.parseColor("#aa000000"));
mPaint.setStyle(Style.FILL);
canvas.drawRect(r, mPaint);
mPaint.setXfermode(cur_xfermode); // mPaint.setStyle(Style.STROKE);
// 绘制圆形
canvas.drawCircle(getWidth() / 2, getHeight() / 2, mRadius, mPaint);
// 绘制边框
canvas.drawCircle(getWidth() / 2, getHeight() / 2, mRadius, mBoderPaint);
canvas.restoreToCount(sc);
mPaint.setXfermode(null); }

改动 ClipZoomImageView

public Bitmap onClip()
{
// 获取imageview的bitmap Paint paint = new Paint(); invalidate();
setDrawingCacheEnabled(true);
Bitmap bitmap = getDrawingCache().copy(getDrawingCache().getConfig(), false);
setDrawingCacheEnabled(false);
// 创建你要截取的位图
Bitmap bitmap2 = Bitmap.createBitmap(2 * mRadius, 2 * mRadius, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap2); canvas.drawRoundRect(new RectF(0, 0, 2 * mRadius, 2 * mRadius), mRadius, mRadius, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
RectF dst = new RectF(-bitmap.getWidth() / 2 + mRadius, -getHeight() / 2 + mRadius, bitmap.getWidth() - bitmap.getWidth() / 2 + mRadius, getHeight() - getHeight() / 2 + mRadius);
canvas.drawBitmap(bitmap, null, dst, paint); return bitmap2;
}

更改后的源代码下载

Android 实现最新版QQ图像裁剪功能的更多相关文章

  1. 用JQuery仿造QQ头像裁剪功能

    最近工作真心忙碌,几乎没时间写博客.今天趁周末来仿一个QQ头像裁剪功能插件.效果如下: 所有文件都可在我的Github上下载,从头到尾从简到繁按步骤一共分了9个HTML文件,每个步骤文件里的注释都写的 ...

  2. android之照相、相冊裁剪功能的实现过程

    今天无聊做了一些照相.相冊裁剪功能,希望能够帮到大家! 不多说了,贴代码实际一点: 首先是XML: <ImageButton android:id="@+id/imageButton1 ...

  3. Android学习之仿QQ側滑功能的实现

    如今项目越来越多的应用了滑动删除的功能,Android本来遵循的是长按删除,IOS定制的是滑动删除,不可否认滑动删除确实在客户体验上要好一点,所以看了非常多关于仿QQ滑动删除的样例,还是感觉代码家的A ...

  4. 【开源】canvas图像裁剪、压缩、旋转

    前言 前段时间遇到了一个移动端对图像进行裁剪.压缩.旋转的需求. 考虑到已有各轮子的契合度都不高,于是自己重新造了一个轮子. 关于图像裁剪.压缩 在HTML5时代,canvas的功能已经非常强大了,可 ...

  5. canvas图像裁剪、压缩、旋转

    转载于:http://www.cnblogs.com/dailc/p/7843204.html 前言 前段时间遇到了一个移动端对图像进行裁剪.压缩.旋转的需求.考虑到已有各轮子的契合度都不高,于是自己 ...

  6. Android实现类似换QQ头像功能(图片裁剪)

    现在几乎所有的App都有用户登录模块,需要设置用户头像,而关于用户头像部分无疑也是比较头疼的,目前大部分应用的头像部分会有两种方式:一种是利用系统的裁剪功能去获取用户头像,一种就是获取到图片或者照片的 ...

  7. [Android]仿新版QQ的tab下面拖拽标记为已读的效果

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4182929.html 可拖拽的红点,(仿新版QQ,tab下面拖 ...

  8. Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

    本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样:   ▲ 微信群聊界面里的@人功能    ▲ QQ群聊界面里 ...

  9. Android SDK4/5/6/7,相册、拍照及裁剪功能及遇见的坑

    保存照片和视频到系统相册显示- http://blog.csdn.net/chendong_/article/details/52290329 Android 7.0 之拍照与图片裁剪适配-http: ...

随机推荐

  1. HDU 4696 Answers 水题

    http://acm.hdu.edu.cn/showproblem.php?pid=4696 由题意可知 1<=Ci<=2 而且图上一定有环 那么我们可以得出: 只要存在奇环(即Ci=1) ...

  2. Mblog 部署手册

    准备工作 安装 JDK8 安装图片处理工具:GraphicsMagick1.3.20,下载地址 安装 Maven 准备 IDE (如果你不看源码,可以忽略下面的步骤,直接通过Maven编译war包) ...

  3. Python学习(三) 八大排序算法的实现(下)

    本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...

  4. 传输资料在100MB以上的 传输介质选择

    传输资料在100MB以上的 硬盘-->千兆局域网-->硬盘 硬盘-->USB3.0-->硬盘 硬盘-->数据线-->硬盘 传输速率 USB 的理论传输值 USB2. ...

  5. 5.Node.js 安装配置

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js安装包及源码下载地址为:https://nodejs.org/en/downlo ...

  6. Java Base64、HMAC、SHA1、MD5、AES DES 3DES加密算法

    ●  BASE64 严格地说,属于编码格式,而非加密算法    ●  MD5(Message Digest algorithm 5,信息摘要算法)    ●  SHA(Secure Hash Algo ...

  7. golang excel

    github.com/tealeg/xlsx 封装的接口简单易用 package main import ( "bufio" "fmt" "githu ...

  8. web存储方法,现成代码

    1.cookie的设置与取用 function setCookie(cname,cvalue,exdays){ var d = new Date(); d.setTime(d.getTime()+(e ...

  9. (转)Tomcat调优

    问题定位 对于Tomcat的处理耗时较长的问题主要有当时的并发量.session数.内存及内存的回收等几个方面造成的.出现问题之后就要进行分析了. 1.关于Tomcat的session数目 这个可以直 ...

  10. 【习题 7-7 UVA-12558】Egyptian Fractions (HARD version)

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 迭代加深搜索. 枚举最大量maxdep 在dfs里面传剩余的要凑的分子.分母 以及上一次枚举的值是多少. 然后找到最小的k,满足1/ ...