先上效果图:

实现思路:

自定义一个View,继承ImageView,通过PorterDuffXfermode实现一个Mask效果,并在onDraw中画出来。

自定义View的代码:

public class CircleClipView extends ImageView{private Paint backgroundPaint = null;private Paint maskPaint = null;private int backgroundColor = -1;public CircleClipView(Context context) {// TODO Auto-generated constructor stubsuper(context);init();}public CircleClipView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubTypedArray a = context.obtainStyledAttributes(attrs,R.styleable.circleview);backgroundColor = a.getColor(R.styleable.circleview_backgroundcolor, Color.WHITE);a.recycle();init();}private void init(){maskPaint = new Paint();PorterDuffXfermode porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);maskPaint.setXfermode(porterDuffXfermode);maskPaint.setColor(Color.TRANSPARENT);maskPaint.setAntiAlias(true);backgroundPaint = new Paint();backgroundPaint.setColor(backgroundColor);backgroundPaint.setAntiAlias(true);  }private Bitmap getMask(){Bitmap b = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);  Canvas canvas = new Canvas(b);RectF rectF = new RectF(0, 0, getWidth(), getHeight());canvas.drawRect(rectF, backgroundPaint);canvas.drawOval(rectF, maskPaint);return b;}private Bitmap scaleDrawable(Drawable drawable){Bitmap b = ((BitmapDrawable) drawable).getBitmap();Matrix matrix = new Matrix();float scaleWidth = ((float) getWidth()) / b.getWidth();    float scaleHeight = ((float) getHeight()) / b.getHeight();   matrix.postScale(scaleWidth, scaleHeight);Bitmap bitmap = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(),matrix, true);return bitmap;}@Overrideprotected void onDraw(Canvas canvas){Bitmap sourceBitmap = scaleDrawable(getDrawable());if(sourceBitmap != null) canvas.drawBitmap(sourceBitmap, 0, 0, null);canvas.drawBitmap(getMask(), 0, 0, null);}
}

XML代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:myapp="http://schemas.android.com/apk/res/com.rfjr.first"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical" ><com.rfjr.first.view.CircleClipViewandroid:layout_width="200dp"android:layout_height="200dp"android:src="@drawable/icon"myapp:backgroundcolor="#ffffff" /></RelativeLayout>

Android仿QQ圆形头像相关推荐

  1. android qq 圆形头像,Android仿QQ圆形头像个性名片

    先看看效果图: 中间的圆形头像和光环波形讲解请看:https://www.jb51.net/article/96508.htm 周围的气泡布局,因为布局RatioLayout是继承自ViewGroup ...

  2. android 仿qq修改头像,Qt:小项目仿QQ修改头像界面,技术点记录

    最近写了一个修改头像功能的UI,布局参考了QQ目前的修改头像界面.如下图 这里主要说明一下两个地方的技术:1.头像图片上层的遮罩层,圆形外部为灰色,内部为全透明:2.上传图片宽高比例可以通过鼠标拖拽移 ...

  3. android 仿qq群头像,Android仿微信和QQ多图合并框架(类似群头像)的实现方法

    Android仿微信和QQ多图合并框架(类似群头像)的实现方法 发布时间:2020-10-21 10:33:03 来源:脚本之家 阅读:97 作者:jyb_96 前言 现在多数app里面加入聊天已经是 ...

  4. android人脸识显示头像自定义,Android 仿QQ头像自定义截取功能

    看了Android版QQ的自定义头像功能,决定自己实现,随便熟悉下android绘制和图片处理这一块的知识. 先看看效果: 思路分析: 这个效果可以用两个View来完成,上层View是一个遮盖物,绘制 ...

  5. 仿QQ设置头像(拍照/选择照片)

    仿QQ设置头像(拍照/选择照片) 这是一个很常见的需求,即选择照片作为头像或者拍照作为头像,实现起来不算太复杂,但是融合的知识点还是比较多的,这里记一下供以后回顾以及给有需要的人作为参考. 目前就是这 ...

  6. android 仿QQ,微信群组里的@功能,支持@多人,并能一键删除,能获取上传对应的id(修改版)

    首先注明该文章是借签别人的博客,原文博文地址点击打开链接 android 仿QQ,微信群组里的@功能,支持@多人,并能一键删除,能获取上传对应的id 这个需求来源:本人做集成环信聊天时,项目需要@功能 ...

  7. Android仿QQ侧滑菜单

    先上效果图: GIF图有点模糊,源码已上传Github:Android仿QQ侧滑菜单 ####整体思路: 自定义ItemView的根布局(SwipeMenuLayout extends LinearL ...

  8. android qq分组展开,Android仿qq分组管理的第三方库

    本文实例为大家分享了Android仿qq分组管理的第三方库,供大家参考,具体内容如下 下面先看效果 我们点击展开与折叠分组的功能在库里面是已经封装好的,只能把它已入到项目中,就可以直接用了,十分的方便 ...

  9. Android仿QQ通讯录分组展示ExpandableListView

    Android仿QQ通讯录分组展示ExpandableListView 核心是重写BaseExpandableListAdpter,其实和之前写的普通的BaseAdapter是类似的, 但是BaseE ...

最新文章

  1. Java中Socket通信-客户端向服务端发送照片
  2. Hadoop2.2.0+hive使用LZO压缩那些事
  3. python的前端框架_web前端三大主流框架之Python异步框架如何工作?
  4. elementUI响应式布局@media:基于断点的隐藏类
  5. python中的内置函数返回元素_Python内置函数_________用来返回数值型序列中所有元素之和。...
  6. Java实训项目:GUI学生信息管理系统(2019)【下】
  7. ELK Stack 的应用场景
  8. 2015-2020年各类国际会议与期刊基于图像的三维对象重建论文综述(6)——Training
  9. path的图片下拉效果
  10. 求解汉诺塔问题(提示, 使用递归)
  11. 【常识】户型图要怎么看?买房时销售员不会说的注意事项
  12. 前端实现视频或者图片直链下载
  13. python 期货程序化_文华财经程序化以外,Python量化是更好的选择
  14. 苹果计算机重装系统步骤,苹果mac系统重装_苹果电脑Mac系统重装方法
  15. EOS.CYBEX社区满分入围EOS超级节点候选人!
  16. 自己的家用电脑怎么架设传奇私服??
  17. 降维专题(一):为什么要降维?
  18. 驱动加载错误:insmod: error inserting 'hello.ko': -1 Device or resource busy
  19. PRML笔记:1-介绍
  20. 阿里国际站新版关键词你升级了吗?

热门文章

  1. Android10定制Google开机向导
  2. Qt之QWizard向导界面
  3. 清华快速充电_什么是快速充电
  4. 哲哲打游戏 (25 分)
  5. 创新美学 自成风范 ,BMW 6系GT开启焕新旅程 悦享弘美新境
  6. pypinyin |将得到的中文转化成拼音形式的字符串(详细过程+代码)
  7. Redux、React-Redux入门笔记
  8. 网易云音乐小程序案例分享 附完整代码
  9. 计算机自考本科好还是it培训好,自考本科文凭有用吗|自考怎么样
  10. 产品运营:用户为什么要用你的产品