文档章节

Android 简单实现圆形头像

艾派德德德德
 艾派德德德德
发布于 2014/09/30 23:47
字数 814
阅读 753
收藏 3
点赞 0
评论 0



今天项目中即时通信工具部分要把好友头像由方形转换成圆形,大概也是跟上时代的潮流吧,毕竟连qq都开始使用圆形头像了,我在这里记录一下修改过程.

在网上找了一番之后,大概解决方法有两种

  • 使用自定义组件继承ImageView
  • 通过对BitMap重绘得到

第一种方式,有许多开源框架可以实现,如CircleImageView ,由于我们项目中图片缓存及显示使用的是Android-Universal-Image-Loader,而他本身支持在获取到网络图片之后增加回调,那我毫无疑问的选择了第二种方式实现,

首先我是圆形图片转换的方法


/**
 * 将图片转为圆型
 * 
 * @param bitmap
 * @return
 */
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
	int width = bitmap.getWidth();
	int height = bitmap.getHeight();
	Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);
	Canvas canvas = new Canvas(output);

	final int color = 0xff424242;
	final Paint paint = new Paint();
	final Rect rect = new Rect(0, 0, width, height);
	final RectF rectF = new RectF(rect);
	final float roundPx = width > height ? height / 2 : width / 2;

	paint.setAntiAlias(true);
	canvas.drawARGB(0, 0, 0, 0);
	paint.setColor(color);
	canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
	paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
	canvas.drawBitmap(bitmap, rect, rect, paint);
	return output;
}




再然后是显示图片工具类


public static SimpleImageLoadingListener listener;

public static <T extends ImageView> void displayImage2Circle(T container, String url) {
	if (listener == null) {
		listener = new SimpleImageLoadingListener() {
			@Override
			public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
				super.onLoadingComplete(imageUri, view, loadedImage);
				((ImageView) view).setImageBitmap(getRoundedCornerBitmap(loadedImage));
			}
		};
	}
	ImageLoader.getInstance().displayImage(url, container, listener);
}




这样只要是需要把图片显示为圆形的地方直接调用displayImage2Circle这个方法即可


本以为已经大功告成,没想到使用之后却发现图片四周仿佛被切掉一部分一样,如图: 
tool-editor

起先以为是图片有白边,后来发现不是,图片地址 
然后以为是半径没算对,验证之后再次被排除 
最终把原因定位到了Image-Loader上,解决办法如下:

ImageLoaderConfiguration的defaultDisplayImageOptions方法需要一个DisplayImageOptions参数而DisplayImageOptions的参数的imageScaleType属性默认的是ImageScaleType.IN_SAMPLE_POWER_OF_2就是这个属性导致的图片不圆,查了一下文档


/** 
 * 图片的缩放方式 
 */  
imageScaleType(ImageScaleType imageScaleType)  
imageScaleType:  
               EXACTLY :图像将完全按比例缩小的目标大小  
               EXACTLY_STRETCHED:图片会完全缩放到目标大小  
               IN_SAMPLE_INT:图像将被二次采样的整数倍
               IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小  
               NONE:图片不会调整




IN_SAMPLE_POWER_OF_2模式下缩放是成倍缩放的所以导致实际显示的要比我设定的宽一些,改成EXACTLY_STRETCHED之后问题得到解决

最后展示一下最终效果 
tool-editor 
以及Image-Loader的完整设置


private void initImageLoader() {
	DisplayImageOptions options = new DisplayImageOptions.Builder()
    .showImageForEmptyUri(R.drawable.default_image) 
    .showImageOnFail(R.drawable.default_image) 
    .delayBeforeLoading(1000)
    .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) 
    .bitmapConfig(Config.RGB_565) 
    .build();
	
	File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), Util.getCachePath()); 
	
	ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
    .denyCacheImageMultipleSizesInMemory()
    .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
    .threadPoolSize(4)
    .memoryCacheSize(2 * 1024 * 1024)
    .diskCache(new UnlimitedDiscCache(cacheDir)) // 缓存路径
    .diskCacheSize(50 * 1024 * 1024)
    .diskCacheFileCount(100)
    .defaultDisplayImageOptions(options) 
    .build();
	
	 ImageLoader.getInstance().init(config);  

}




公司项目我就不放源码了,核心代码都在上面了.有问题可以和我联系


© 著作权归作者所有

共有 人打赏支持
艾派德德德德
粉丝 0
博文 1
码字总数 814
作品 0
东城
程序员
在android中画圆形图片的几种办法

在开发中经常会有一些需求,比如显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其他的一些形状。但是往往我们手上的图片或者从服务器获取到的图片都是方形的。这时候就需要我们自...

码农明明
2014/09/19
0
5
【AndroidSupport】RoundedBitmapDrawable 创建一个圆角图片

【AndroidSupport】RoundedBitmapDrawable 创建一个圆角图片 简介 RoundedBitmapDrawable 是 android.support.v4.graphics.drawable 里面的一个类,用来创建简单的圆角图片。如果只是简单的圆...

xesam
2015/11/12
0
0
Android自定义控件(三)继承控件

继承控件是我们Android开发中最重要也是最常使用的控件,它不同于自绘控件和组合控件,它不需要我们自己去重新去实现一个控件。面向对象的一个重要特性就是继承,相信各位同学对继承的了解都...

Jack_1900
2014/07/13
0
3
Android, Picasso、Glide与头像

在实际开发中,经常会需要显示用户头像,下面就具体分析下用Picasso,显示头像的实现过程。 既然是头像,那么就必然会涉及到修改头像;如果app的功能相对来说较多,板块较杂,这个时候Picas...

Sn__
04/23
0
0
Android 圆角、圆形 ImageView 实现

一、 特点 基于AppCompatImageView扩展 支持圆角、圆形显示 可绘制边框,圆形时可绘制内外两层边框 支持边框不覆盖图片 可绘制遮罩 ...... 二、基本原理 我们要实现的图片控件继承自,它是的...

Othershe
06/25
0
0
Android Progressbar

各种类型的Android进度条:CircleProgress: http://www.open-open.com/lib/view/open1415936845930.html#label0 自定义圆形的ProgressBar: http://www.cnblogs.com/xingfuzzhd/archive/2013......

当空皓月
2015/04/20
0
0
Android 两种自定义ProgressBar

横向的ProgressBar 在res下创建drawable文件夹,新建文件drawable/progressbar_color.xml <?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/......

yaly
2015/05/05
0
0
Android系统设置联系人头像教程

Android系统的手机是不支持编辑SIM卡上的联系人的,所以要设置联系人的头像也是没办法的,那么要怎么才能设置Android系统的联系人头像呢? 工具/原料 Android手机 方法/步骤 打开手机的联系人...

伊甸网
2013/04/08
0
0
【Android游戏开发二十】物理游戏之重力系统开发,让你的游戏变得有质有量!

李华明Himi 原创,转载务必在明显处注明: 【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/354.html 今天群里一哥哥说急需关于物理游戏方面的资料,so~下午就随手写了一...

迷途d书童
2012/03/19
0
0
[Android学习笔记九] Android 开发中图片灰阶(黑白)显示

阅读本文之前关于将RGB颜色值转换为灰阶值的计算方法可参见: 三种算法转换彩色灰阶 http://aiilive.blog.51cto.com/1925756/1718960 灰阶显示图片的典型应用就是用户头像,如用户在线头像显...

secondriver
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部