Android 圆形头像 自己动手

时间:2022-01-07 17:24:56

圆形头像DIY

现在大部分app使用的都是圆形头像,网上开源的也很多,但是有没有考虑过DIY圆形头像呢?下面就自己实现一个,先看下demo展示

Android 圆形头像 自己动手

第一步:原理解释(图片很丑,原理很真)

1、画外框圆形,需要使用自定义的颜色画一个圆形,比图片的半径长5dp

Android 圆形头像 自己动手

2、自定义圆形画好了后,将我们需要转换成圆形头像的图片画到上面,从中间开始覆盖,得到如下图片

Android 圆形头像 自己动手

3、中间截取图片,半径设置为:r=min(width,height),圆心设为:cx=width/2,cy=height/2,这样可以从中间开始截取圆形图片

第二步、代码实现

1、首先继承ImageView

2、重写onDraw(Canvas canvas)方法

3、设置图片缩放类型setScaleType(ScaleType.CENTER_CROP); 中间截取

具体代码如下:

  1. @Override
  2. protected void onDraw(Canvas canvas) {
  3. // super.onDraw(canvas);
  4. setScaleType(ScaleType.CENTER_CROP);
  5. Drawable drawable = getDrawable();
  6. if (null == drawable) {
  7. return;
  8. }
  9. // 将drawable转换成bitmap==>网上找的
  10. Bitmap bitmap = Bitmap
  11. .createBitmap(
  12. drawable.getIntrinsicWidth(),
  13. drawable.getIntrinsicHeight(),
  14. drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
  15. : Bitmap.Config.RGB_565);
  16. Canvas srcCanvas = new Canvas(bitmap);
  17. drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
  18. drawable.getIntrinsicHeight());
  19. drawable.draw(srcCanvas);
  20. float cx = getWidth() / 2;
  21. float cy = getHeight() / 2;
  22. float radius = Math.min(getWidth(), getHeight()) / 2;
  23. Paint borderPaint = new Paint();
  24. borderPaint.setAntiAlias(true);
  25. borderPaint.setColor(Color.GREEN);
  26. canvas.drawCircle(cx, cy, radius, borderPaint);
  27. // 画图
  28. BitmapShader shader = new BitmapShader(bitmap, TileMode.CLAMP,
  29. TileMode.CLAMP);
  30. Paint paint = new Paint();
  31. paint.setShader(shader);
  32. paint.setAntiAlias(true);
  33. canvas.drawCircle(cx, cy, radius - 5, paint);
  34. }

代码只是简单的demo,当然可以定制成通用的CircleImageView,需要根据自己的需求DIY!!

其他精彩文章文章

Android KSOAP2调用.net webservice

jQuery教程(8)-DOM树操作之使用反向插入方法

android学习笔记(34)使用AlertDialog创建简单对话框

android学习笔记(33)画廊视图(Gallery)的功能和用法

android navidgation drawer 在导航抽屉中如何改变List选中项的...

更多关于android开发文章

Android 圆形头像 自己动手的更多相关文章

  1. Android圆形头像,拍照后“无法加载此图片”的问题解决(适配Android7.0)

    Feature: 点击选择拍照或者打开相册,选取图片进行裁剪最后设置为圆形头像. Problem: 拍好照片,点击裁剪,弹Toast"无法加载此图片". Solution: 在裁剪 ...

  2. Android之圆形头像裁切

    PS:今天项目测试组发现,百度地图定位的数据坐标位置是正确的,但是显示的数据是错误的.最后查来查去发现,那个商厦在百度地图上根本就没有那条数据,这让我如何显示,当初就推崇使用高德地图定位,上面的数据量 ...

  3. Android控件Gridview实现仿支付宝首页,Fragment底部按钮切换和登录圆形头像

    此案例主要讲的是Android控件Gridview(九宫格)完美实现仿支付宝首页,包含添加和删除功能:Fragment底部按钮切换的效果,包含四个模块,登录页面圆形头像等,一个小项目的初始布局. 效果 ...

  4. Android ImageView圆形头像

    转载自:http://m.oschina.net/blog/321024 Android ImageView圆形头像 图片完全解析 我们在做项目的时候会用到圆形的图片,比如用户头像,类似QQ.用户在用 ...

  5. Android特效专辑(五)——自定义圆形头像和仿MIUI卸载动画—粒子爆炸

    Android特效专辑(五)--自定义圆形头像和仿MIUI卸载动画-粒子爆炸 好的,各位亲爱的朋友,今天讲的特效还是比较炫的,首先,我们会讲一个自定义圆形的imageView,接着,我们会来实现粒子爆 ...

  6. Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码

    Android项目开发中经常会遇见需要实现圆角或者圆形的图片功能,如果仅仅使用系统自带的ImageView控件显然无法实现此功能,所以通过系列文章的形式由简到繁全方位的介绍一下此功能的实现,巩固一下自 ...

  7. 【转】Android ImageView圆形头像

    Android ImageView圆形头像 图片完全解析 我们在做项目的时候会用到圆形的图片,比如用户头像,类似QQ.用户在用QQ更换头像的时候,上传的图片都是矩形的,但显示的时候确是圆形的. 原理: ...

  8. 【Android】自己定义圆形ImageView(圆形头像 可指定大小)

    近期在仿手Q的UI,这里面常常要用到的就是圆形头像,看到 在android中画圆形图片的几种办法 这篇文章,了解了制作这样的头像的原理.只是里面提供的方法另一个不足的地方就是不能依据实际需求改变图片的 ...

  9. Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...

随机推荐

  1. JS使用getComputedStyle()方法获取CSS属性值

    在对网页进行调试的过程中,经常会用到js来获取元素的CSS样式,方法有很多很多,现在仅把我经常用的方法总结如下: 1. obj.style:这个方法只能JS只能获取写在html标签中的写在style属 ...

  2. java的向下转型

    class A{ public void fun1(){ System.out.println("A-->public void fun1()"); } public voi ...

  3. 如何在eclipse使用StaggeredGridView

    概述  现在的开发工具基本都用AndroidStudio了.网上的开源框架也是.比如做瀑布式UI的StaggeredGridView,还有导航页的PagerSlidingTabStrip等. 那么电脑 ...

  4. 《Journey》风之旅人;

    俩个人在茫茫世界相遇,互不相识,却能互相取暖,一路旅程,看尽了美丽的风景,也共同经历了暴风雪,然而该来的人会来,该走的人会走,这不就是人生旅途?

  5. CSS.01 -- 选择器及相关的属性文本、文字、字体、颜色、

    与html相比,Css支持更丰富的文档外观,Css可以为任何元素的文本和背景设置颜色:允许在任何元素外围设置边框:允许改变文本的大小,装饰(如下划线),间隔,甚至可以确定是否显示文本. 什么是CSS? ...

  6. metasploit常用服务扫描和利用模块

    metasploit常用服务扫描和利用模块 SMB扫描 smb枚举auxiliary/scanner/smb/smb_enumusers 扫描命名管道auxiliary/scanner/smb/pip ...

  7. Eclipse 4.5.0 离线安装 Veloeclipse 插件

    下载 Veloeclipse 在 Eclipse eclipse-jee-mars-R-win32-x86_64 版本 4.5.0,Build id 为 20150621-1200,离线安装 Velo ...

  8. day62

    一.组件 组件都具有模板,template new Vue()创建的是根组件 组件与实例一一对应,创建一个实例就是创建了一个组件,同理创建一个组件就相当于创建了一个实例 根组件的挂载点一般就是根组件的 ...

  9. Odoo9发行说明

    2015年10月1日,期待已久的Odoo9正式发布.本文是Odoo9正式版发行说明,基于官网资料翻译. 译者: 苏州-微尘原文地址:https://www.odoo.com/page/odoo-9-r ...

  10. 1.Junit test使用

    1.导入maven依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</arti ...