这是依据翔神那篇高仿微信图像截取改的  能够先去看  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. Vue移动端flexible.js+MuseUi

    因为公司有个项目需求,手机端的.之前就写了一个一样的项目,只不过是用原生的写的,心想刚写了个vue后台管理系统,何不也用vue写,所有就没有把之前的利用过来.那么问题来了,要让手机端自适应我们该怎么做 ...

  2. coverage python 代码覆盖率工具使用(django 使用)

    1. 安装包 pip install coverage 2.启动程序 coverage run -m pytest 3.获取html格式的报告文件 coverage html 4.创建配置文件 .co ...

  3. 小米开源文件管理器MiCodeFileExplorer-源码研究(1)-2个模型Model

    上篇说到,把小米的Java代码整理成了5个包,其中1个是net.micode.fileexplorer.model.这个包就2个模型类,最基本了,FileInfo和FavoriteItem. pack ...

  4. FZU 1962 新击鼓传花游戏

    新击鼓传花游戏 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original ID: 19 ...

  5. Spring Cloud Sleuth通过Kafka将链路追踪日志输出到ELK

    1.工程简介 elk-eureka-server作为其他三个项目的服务注册中心 elk-kafka-client调用elk-kafka-server,elk-kafka-server再调用elk-ka ...

  6. HDU——T 1711 Number Sequence

    http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others)    Memory Lim ...

  7. ArcGIS Engine中空间参照(地理坐标)相关方法总结

    转自原文 ArcGIS Engine中空间参照(地理坐标)相关方法总结 1.创建空间参考 /// <summary> /// 根据prj文件创建空间参考 /// </summary& ...

  8. open阶段的一致性检验(二)

    SQL> select * from v$version where rownum=1; BANNER --------------------------------------------- ...

  9. XMPP开发之从零開始

    对于server的搭建和设置.我在这里就不再多说了.有好多前辈已经帮大家攻克了.能够參考下这篇博客 XMPPserver配置 我依照这个博客配置好了,server后,然后在网上參照代码写了一个小的de ...

  10. canvas:飞机大战

    最开始我们要初始化信息,我们有五个状态,游戏封面,加载状态,运行状态,游戏暂停,游戏结束 我们还需要得分score,生命life var START = 1;//初始状态 var LOADING = ...