Android仿QQ圆形头像
先上效果图:
实现思路:
自定义一个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圆形头像相关推荐
- android qq 圆形头像,Android仿QQ圆形头像个性名片
先看看效果图: 中间的圆形头像和光环波形讲解请看:https://www.jb51.net/article/96508.htm 周围的气泡布局,因为布局RatioLayout是继承自ViewGroup ...
- android 仿qq修改头像,Qt:小项目仿QQ修改头像界面,技术点记录
最近写了一个修改头像功能的UI,布局参考了QQ目前的修改头像界面.如下图 这里主要说明一下两个地方的技术:1.头像图片上层的遮罩层,圆形外部为灰色,内部为全透明:2.上传图片宽高比例可以通过鼠标拖拽移 ...
- android 仿qq群头像,Android仿微信和QQ多图合并框架(类似群头像)的实现方法
Android仿微信和QQ多图合并框架(类似群头像)的实现方法 发布时间:2020-10-21 10:33:03 来源:脚本之家 阅读:97 作者:jyb_96 前言 现在多数app里面加入聊天已经是 ...
- android人脸识显示头像自定义,Android 仿QQ头像自定义截取功能
看了Android版QQ的自定义头像功能,决定自己实现,随便熟悉下android绘制和图片处理这一块的知识. 先看看效果: 思路分析: 这个效果可以用两个View来完成,上层View是一个遮盖物,绘制 ...
- 仿QQ设置头像(拍照/选择照片)
仿QQ设置头像(拍照/选择照片) 这是一个很常见的需求,即选择照片作为头像或者拍照作为头像,实现起来不算太复杂,但是融合的知识点还是比较多的,这里记一下供以后回顾以及给有需要的人作为参考. 目前就是这 ...
- android 仿QQ,微信群组里的@功能,支持@多人,并能一键删除,能获取上传对应的id(修改版)
首先注明该文章是借签别人的博客,原文博文地址点击打开链接 android 仿QQ,微信群组里的@功能,支持@多人,并能一键删除,能获取上传对应的id 这个需求来源:本人做集成环信聊天时,项目需要@功能 ...
- Android仿QQ侧滑菜单
先上效果图: GIF图有点模糊,源码已上传Github:Android仿QQ侧滑菜单 ####整体思路: 自定义ItemView的根布局(SwipeMenuLayout extends LinearL ...
- android qq分组展开,Android仿qq分组管理的第三方库
本文实例为大家分享了Android仿qq分组管理的第三方库,供大家参考,具体内容如下 下面先看效果 我们点击展开与折叠分组的功能在库里面是已经封装好的,只能把它已入到项目中,就可以直接用了,十分的方便 ...
- Android仿QQ通讯录分组展示ExpandableListView
Android仿QQ通讯录分组展示ExpandableListView 核心是重写BaseExpandableListAdpter,其实和之前写的普通的BaseAdapter是类似的, 但是BaseE ...
最新文章
- Java中Socket通信-客户端向服务端发送照片
- Hadoop2.2.0+hive使用LZO压缩那些事
- python的前端框架_web前端三大主流框架之Python异步框架如何工作?
- elementUI响应式布局@media:基于断点的隐藏类
- python中的内置函数返回元素_Python内置函数_________用来返回数值型序列中所有元素之和。...
- Java实训项目:GUI学生信息管理系统(2019)【下】
- ELK Stack 的应用场景
- 2015-2020年各类国际会议与期刊基于图像的三维对象重建论文综述(6)——Training
- path的图片下拉效果
- 求解汉诺塔问题(提示, 使用递归)
- 【常识】户型图要怎么看?买房时销售员不会说的注意事项
- 前端实现视频或者图片直链下载
- python 期货程序化_文华财经程序化以外,Python量化是更好的选择
- 苹果计算机重装系统步骤,苹果mac系统重装_苹果电脑Mac系统重装方法
- EOS.CYBEX社区满分入围EOS超级节点候选人!
- 自己的家用电脑怎么架设传奇私服??
- 降维专题(一):为什么要降维?
- 驱动加载错误:insmod: error inserting 'hello.ko': -1 Device or resource busy
- PRML笔记:1-介绍
- 阿里国际站新版关键词你升级了吗?