android圆形头像 demo,Android图像处理之绘制圆形头像

在Android中,绘制圆形和绘制图片都是很容易的事情,但是绘制圆形图片就有点难倒人了。以前为了偷懒就直接去github上找一个开源项目,后来才发现绘制圆形图片其实也是很简单的事。绘制圆形图片也需要两个步骤:绘制圆形和绘制图片,只不过要让它们取并集,得到的结果就是一张圆形图片了。直接上代码。

public class CircleImageView extends View {

private Paint mPaint;

private Paint mTargetPaint;

private Bitmap mSourceBitmap;

private Bitmap mTargetBitmap;

private Canvas mTargetCanvas;

private int mWidth;

private int mHeight;

public CircleImageView(Context context) {

this(context, null);

}

public CircleImageView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init();

}

private void init() {

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mTargetPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mTargetPaint.setXfermode(new PorterDuffXfermode(SRC_IN));

mSourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xiaojiangshi);

mTargetBitmap = Bitmap.createBitmap(mSourceBitmap.getWidth(), mSourceBitmap.getHeight(), Bitmap.Config.ARGB_8888);

mTargetCanvas = new Canvas(mTargetBitmap);

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

mWidth = w;

mHeight = h;

}

@Override

protected void onDraw(Canvas canvas) {

// 生成圆形Bitmap过程.

int radius = Math.min(mWidth, mHeight) / 2;

// 先绘制圆形

mTargetCanvas.drawCircle(mWidth / 2, mHeight / 2, radius, mPaint);

// 再绘制Bitmap

mTargetCanvas.drawBitmap(mSourceBitmap, 0, 0, mTargetPaint);

canvas.drawBitmap(mTargetBitmap, 0, 0, null);

}

}

效果如下:

57025c3491c1

代码中最关键的就是这句:

mTargetPaint.setXfermode(new PorterDuffXfermode(SRC_IN));

SRC_IN这种模式可以让两个绘制的效果取交集后展现出来,需要注意的是,dst需要先绘制,再绘制src,拿上面例子来说,就是要先绘制圆形,在绘制Bitmap,如果顺序颠倒了,你就只能看到一个圆形了。

除了SRC_IN这种模式外,还有其它15种模式。有兴趣的可以自己试试看效果。在官方提供的APIDemo中可以找到相应的代码。

57025c3491c1

知道这个原理之后,我们就能绘制各种形状的图片了,只需要绘制不同的形状代替绘制圆形这一步骤就可以了。

三角形:

mPath.reset();

mPath.moveTo(mWidth / 2, 0);

mPath.lineTo(0, mHeight);

mPath.lineTo(mWidth, mHeight);

mPath.close();

mTargetCanvas.drawPath(mPath, mPaint);

57025c3491c1

扇形:

RectF rectF = new RectF(0, 0, mWidth, mHeight);

mTargetCanvas.drawArc(rectF, 210, 120, true, mPaint);

57025c3491c1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芯片项目烂尾怎么办?国家发改委回应了!

来源:北京日报客户端芯片项目烂尾的报道近日引发关注。对此,国家发改委新闻发言人孟玮在今日(20日)上午举行的例行发布会上回应,将会同有关部门强化顶层设计,狠抓产业规划布局,努力维护产业发展…

idea中二级包为什么创建不了_IDEA通过Maven打包JavaFX工程(OpenJFX11)

1 概述 最近研究JFX,写出来了但是打包不了,这。。。尴尬。。。 IDEA的文档说只支持Java8打成jar包: 尝试过直接使用Maven插件的package,不行,也尝试过Build Artifacts,也不行,各种奇奇怪怪的问题…

鸿蒙系统发布会16号几点,华为鸿蒙手机系统正式定档发布,12月16日于我们见面...

#华为鸿蒙系统#大家都知道,华为手机已经无法预装谷歌GMS服务了,对于大部分海外用户来说,GMS服务还是相当重要的,谷歌全家桶内置了地图、搜索、视频娱乐等功能,但凡是搭载了安卓系统的智能手机,那么就无法离…

Gartner发布2021年重要战略科技趋势

来源:Gartner公司全球领先的信息技术研究和顾问公司Gartner于今日发布企业机构在2021年需要深挖的重要战略科技趋势。分析师们在本周举行的Gartner IT Symposium/Xpo大会美洲站虚拟会议上展示了自己的发现。Gartner研究副总裁Brian Burke表示:“各企业职…

pause pod 什么是pod_Kubernetes 自主式Pod清单 干货太多先马住慢慢看

在讲资源清单之前,先给大家介绍一下究竟什么是Kubernetes资源?有几种资源?① 资源分类:① 1 工作负载:pod、rs(ReplicasSet)、deploy(Deployment)、sts(StatefulSet)、ds(DaemonSet)、job、cronjob① 2 服务发现及负…

不会Python开发的运维终将被淘汰?

Python语言是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明。Python语法简捷而清晰,具有丰富和强大的类库,具有可扩展性和可嵌入性,是现代比较流行的语言。 一、最流行的语言 IEEE Spectrum 的数据记…

8大领域、6大机遇!读懂2020年AI医疗新风向

来源 | 工业互联网创新中心、36氪研究院编辑 | 蒲蒲蓝皮书如下未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(…

arduino uno r3单片机封装图_Arduino教程 | 初识Arduino

前一段时间偶然进入创客空间并接触到了开源硬件,小编表示十分感兴趣。于是这周打算汇总一下网络上现有的一些关于Arduino的及教程进行分享。首先感谢一下各位原作者,在此表示十分感谢~什么是Arduino?Arduino是一个能够用来感应和控制现实物理…

神经网络原来是这样和数学挂钩的

来源:遇见数学近几年,有几个被媒体大肆报道的事件,如下表所示。如上所示,深度学习作为人工智能的一种具有代表性的实现方法,取得了很大的成功。那么,深度学习究竟是什么技术呢?深度学习里的“学…

鸿蒙os开发小程序,9岁小学生展示鸿蒙OS开发:这操作太秀了

华为的鸿蒙 OS 正在迅速成熟,这背后离不开无数开发者的支持。近日,鸿蒙 OS 技术社区就向大家介绍了一位特殊的鸿蒙开发者,今年只有 9 岁,还是个小学生 ……在鸿蒙社区,这位小开发者坐在镜头前,向大家演示了…

java调用一个方法后怎么继续执行不等待该方法的返回_Java面试题大全2020版(二)...

今天给大家推送第二部分,主要的大块内容分为:多线程、反射、对象拷贝。三大块内容中涉及到的考点如下:三、多线程35. 并行和并发有什么区别?并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时…

城市“脑梗” 当前城市大脑面临的困境

来源:中国建设报智慧城市 作者 刘锋 吕本富2020年,城市大脑已经成为前沿科技和城市建设发展的重点,有近百个城市宣布开展城市大脑建设。数百家科技企业进入到泛城市大脑的建设领域,有数百亿的资金投入到城市大脑的建设中。面对…

html5 banner特效,HTML5特效库 CSS3遮罩banner动画特效源码

效果图各位朋友。大家早上好!今天给大家带来的是 CSS3遮罩banner动画特效源码!看倦的轮播图的,可以试试这个特效!别有一番意思!大家可以按照自己的意愿进行行修改,改成自己喜欢的样子!有想要文件…

android蓝牙通信_使用Arduino构建OLED显示屏与Android手机接口的智能手表

背景知识视频教程Arduino 训练营:通过项目学习​viadean.com通过制作Arduino UNO FM收音机接收器学习Arduino I2C​viadean.com通过构建实际应用程序来掌握Arduino - 国外课栈​viadean.com我们大多数人都熟悉162点阵液晶显示器,它在许多项目中用于向用户…

DeepMind新突破!首次用深度学习从第一性原理计算分子能量

来源:AI科技评论编译 | 青暮DeepMind发表了一项新研究,展示了深度学习如何帮助解决现实系统中的量子力学基本方程问题,相关论文发表在物理学期刊《Physical Review Research》,代码也已经开源。这种新的神经网络架构叫做Fermionic…

重磅发布:2020全球前沿技术发展趋势报告

来源:科技日报作者:刘垠、操秀英大热的脑机接口、基因编辑等前沿技术发展如何?2020年科技界关注了哪些热点?22日在浦江创新论坛上发布的《全球前沿技术发展趋势报告》带来了答案。《全球前沿技术发展趋势报告》由中国科学技术信息…

400错误是什么原因_499错误是什么?499错误的原因及解决方法

​HTTP状态码出现499错误有多种情况,499错误是什么?下面我们来学习Nginx 499错误的原因及解决方法。日志记录中HTTP状态码出现499错误有多种情况,比如nginx反代到一个永远打不开的后端,日志状态记录就会是499、发送字节数是0。​经…

MapReduce过程详解及其性能优化

http://blog.csdn.net/aijiudu/article/details/72353510 废话不说直接来一张图如下: 从JVM的角度看Map和Reduce Map阶段包括: 第一读数据:从HDFS读取数据 1、问题:读取数据产生多少个Mapper?? Mapper数据过大的话&…

爱因斯坦梦断“大统一理论”

来源:数学职业家爱因斯坦发表了他最为得意之作:广义相对论之后,便开始了他的“统一之梦”。大有“躲进小楼成一统,管他冬夏与春秋”之势,这一“统”就是三十余年,到死方休。尽管统一场论一词始于爱因斯坦&a…

js数组截取前5个_想用好 Node.js?这 5 个经典国产项目值得细品

凭借着高并发性能优秀、异步事件驱动、入门简单等优势,Node.js 受到了不少开发者们的青睐。但不得不承认的是,如果用不好 Node.js,它的坑就会非常多,为了帮助各位 Node.js 的开发者们更灵活地使用它,Gitee 为大家推荐以…