java 微信群组头像_仿微信生成群组头像
背景
项目中涉及到群组聊天的功能,由于前期项目比较紧张,群组头像并没有按照群成员头像去自动生成,即类似微信群组头像的效果,今天进行一下效果优化,效果如下:
仿微信生成群组头像
实现步骤
获取群组成员头像
可以采用开源图片加载库把图片加载至本地即可。说明一下,这里并没有在线去加载头像,而是考虑到在其它地方有单独加载头像的地方,所以头像都是从本地直接读取。
生成群组头像
先上代码
public Bitmap generateGroupAvator(List data) {
switch (data == null ? 0 : data.size()) {
case 1: {
return data.get(0);
}
case 2: {
int widthSize = mSize / 2;
int heightSize = mSize / 2;
Bitmap groupAvator = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(groupAvator);
canvas.drawColor(0xFFe1e2e3);
for (int i = 0; i < data.size(); i++) {
Bitmap bitmap = data.get(i);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(widthSize * 1.0f / width, heightSize * 1.0f / height);
Bitmap newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
canvas.drawBitmap(newBit, i % 2 * widthSize, (mSize - heightSize) / 2 + i / 2 * heightSize, null);
}
canvas.save();
canvas.restore();
return groupAvator;
}
case 3: {
int widthSize = mSize / 2;
int heightSize = mSize / 2;
Bitmap groupAvator = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(groupAvator);
canvas.drawColor(0xFFe1e2e3);
for (int i = 0; i < data.size(); i++) {
Bitmap bitmap = data.get(i);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(widthSize * 1.0f / width, heightSize * 1.0f / height);
Bitmap newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
if (i == 0) {
canvas.drawBitmap(newBit, (mSize - widthSize) / 2, 0, null);
} else {
canvas.drawBitmap(newBit, i / 2 * widthSize, heightSize, null);
}
}
canvas.save();
canvas.restore();
return groupAvator;
}
case 4: {
int widthSize = mSize / 2;
int heightSize = mSize / 2;
Bitmap groupAvator = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(groupAvator);
canvas.drawColor(0xFFe1e2e3);
for (int i = 0; i < data.size(); i++) {
Bitmap bitmap = data.get(i);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(widthSize * 1.0f / width, heightSize * 1.0f / height);
Bitmap newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
canvas.drawBitmap(newBit, i % 2 * widthSize, i / 2 * heightSize, null);
}
canvas.save();
canvas.restore();
return groupAvator;
}
case 5: {
int widthSize = mSize / 3;
int heightSize = mSize / 3;
Bitmap groupAvator = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(groupAvator);
canvas.drawColor(0xFFe1e2e3);
for (int i = 0; i < data.size(); i++) {
Bitmap bitmap = data.get(i);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(widthSize * 1.0f / width, heightSize * 1.0f / height);
Bitmap newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
if (i < 2) {
canvas.drawBitmap(newBit, widthSize / 2 + i * widthSize, heightSize / 2, null);
} else {
canvas.drawBitmap(newBit, i % 3 * widthSize, heightSize / 2 + heightSize, null);
}
}
canvas.save();
canvas.restore();
return groupAvator;
}
case 6: {
int widthSize = mSize / 3;
int heightSize = mSize / 3;
Bitmap groupAvator = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(groupAvator);
canvas.drawColor(0xFFe1e2e3);
for (int i = 0; i < data.size(); i++) {
Bitmap bitmap = data.get(i);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(widthSize * 1.0f / width, heightSize * 1.0f / height);
Bitmap newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
canvas.drawBitmap(newBit, i % 3 * widthSize, heightSize / 2 + i / 3 * heightSize, null);
}
canvas.save();
canvas.restore();
return groupAvator;
}
case 7: {
int widthSize = mSize / 3;
int heightSize = mSize / 3;
Bitmap groupAvator = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(groupAvator);
canvas.drawColor(0xFFe1e2e3);
for (int i = 0; i < data.size(); i++) {
Bitmap bitmap = data.get(i);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(widthSize * 1.0f / width, heightSize * 1.0f / height);
Bitmap newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
if (i == 0) {
canvas.drawBitmap(newBit, widthSize, 0, null);
} else {
canvas.drawBitmap(newBit, (i + 2) % 3 * widthSize, (i + 2) / 3 * heightSize, null);
}
}
canvas.save();
canvas.restore();
return groupAvator;
}
case 8: {
int widthSize = mSize / 3;
int heightSize = mSize / 3;
Bitmap groupAvator = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(groupAvator);
canvas.drawColor(0xFFe1e2e3);
for (int i = 0; i < data.size(); i++) {
Bitmap bitmap = data.get(i);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(widthSize * 1.0f / width, heightSize * 1.0f / height);
Bitmap newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
if (i < 2) {
canvas.drawBitmap(newBit, widthSize / 2 + i * widthSize, 0, null);
} else {
canvas.drawBitmap(newBit, (i + 1) % 3 * widthSize, (i + 1) / 3 * heightSize, null);
}
}
canvas.save();
canvas.restore();
return groupAvator;
}
case 9: {
int widthSize = mSize / 3;
int heightSize = mSize / 3;
Bitmap groupAvator = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(groupAvator);
for (int i = 0; i < data.size(); i++) {
Bitmap bitmap = data.get(i);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(widthSize * 1.0f / width, heightSize * 1.0f / height);
Bitmap newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
canvas.drawBitmap(newBit, i % 3 * widthSize, i / 3 * heightSize, null);
}
canvas.save();
canvas.restore();
return groupAvator;
}
default:
break;
}
return null;
}
- 实现思路
根据图片张数,计算出每张头像在群组头像中的尺寸,然后缩放头像,最后把缩放后的头像画到合适的位置即可。
java 微信群组头像_仿微信生成群组头像相关推荐
- android微信群聊功能,Android仿微信群聊头像效果
在网上找了些仿微信群聊头像的开源库后,发现没特别好用的,或者说满足我需求的,就只好在别人的基础上改了下,也就有了这样的自定义控件了,以此来实现微信群聊头像的效果,效果图如下所示: 主要实现: 一.自定 ...
- 安卓开发仿微信图片拖拽_仿微信朋友圈发表图片拖拽和删除功能
原标题:仿微信朋友圈发表图片拖拽和删除功能 中国联通在香港公布了上市公司2017年中期业绩.2017年上半年,公司主要业绩指标持续向好,收入稳步回升,服务收入达到人民币1,241.1亿元,同比增长3. ...
- android仿微博头像_仿微博点击头像加载动画
预览图 原理 整个效果分成两部分.一部分为弧度动画,一部分为点点动画 弧度动画就是画弧线,动画改变弧度就可以了 点点动画比较复杂.总共分为两步,1.计算非弧线的地方可以容纳的点点个数,然后画出来:2. ...
- 基于微信小程序开发的仿微信demo
(本文参考自github/liujians,地址:https://github.com/liujians/weApp) 作者声明: 基于微信小程序开发的仿微信demo 整合了ionic的样式库和we ...
- Linux运维微信群,新闻|Linux 中国官方微信群开放加入
终于,我找到了微信群的正确打开方式. 作为一家社区,提供交流渠道一直是我们的目标之一.从最早提供论坛:到后来开了 10 连号的 QQ 群,并升级到 2000 人群:再到微信兴起后拉了一个又一个的微信群 ...
- 企业微信SCRM系统部署_企业微信SCRM二次开发_企业微信SCRM系统独立版源码价格
企业微信SCRM系统部署_企业微信SCRM二次开发_企业微信SCRM系统独立版源码价格 点趣互动是企业微信系统的第三方应用提供厂商,用于管理员工企业微信的内一款系统软件.点趣互动企业微信scrm软件主 ...
- java 头像 微信群_仿微信群头像九宫格控件 LQRNineGridImageView
软件介绍 仿微信群头像九宫格控件 一.简介: 参照Android 仿微信群聊头像文章学习开发的一个仿微信群头像九宫格控件,感谢博主Loften_93663469. 效果如下: 二.使用: 1.在自己项 ...
- java 友好时间显示_仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]...
本文为原创分享,转载请注明出处. 1.引言 即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求,现在都讲究用户体验,所以时间显示再也不能像传统软件一样简单粗地暴显示成"年/月/日 时: ...
- android 仿qq群头像,Android仿微信和QQ多图合并框架(类似群头像)的实现方法
Android仿微信和QQ多图合并框架(类似群头像)的实现方法 发布时间:2020-10-21 10:33:03 来源:脚本之家 阅读:97 作者:jyb_96 前言 现在多数app里面加入聊天已经是 ...
- java实现仿微信app聊天功能_Android仿微信语音聊天功能
本文实例讲述了Android仿微信语音聊天功能代码.分享给大家供大家参考.具体如下: 项目效果如下: 具体代码如下: AudioManager.java package com.xuliugen.we ...
最新文章
- 3dmax批量导出fbx_推荐一款超实用的3DMAX插件——模法师
- ES6-const注意
- 天津工业大学19年计算机考研大纲,2019年天津工业大学《计算机原理及接口技术》考研复试大纲...
- C++11强类型枚举,override/final
- SAP 电商云 Spartacus UI Quick Order 延迟加载的现象分析
- 连接linux工具有哪些_推荐 10 个不错的网络监视工具,值得收藏
- 入门级控件 c# 1615014955
- warpaffine 旋转有一部分消失_如果月球消失了,会发生什么?我们的世界又将会变得怎么样?...
- JDK、JRE、JVM的区别及JavaSE、JavaEE和JavaME的区别?
- ZKUI中文编码以及以docker方式运行的问题
- MYSQL 调优和使用必读
- kill mysql 进程_如何快速处理mysql连接数占满的问题?
- 【22】基于java的电影院售票管理系统
- docker修改服务器ip地址,如何修改docker的ip地址
- 计算机硬件清理步骤,联想笔记本电脑清理灰尘详细步骤
- 按键精灵 获取某网站服务器时间,按键精灵如何获得网络时间的毫秒
- centos6 yum源失效解决方法
- C++/java设计模式汇总
- Windows下jmeter使用
- 北京信息科技大学考研c语言考试,2018年北京信息科技大学计算机院814数据结构和C语言程序设计[专硕]之C程序设计考研核心题库...