[原创]可动态显示圆形图像或圆形文字的AvatarImageView
2016-05-30 17:15
162 查看
项目地址:
https://github.com/Carbs0126/AvatarImageView
前言:
在做电话本或者其他应用时,显示联系人头像的策略一般是这样的:先判断是否有头像图片,如果有,则直接显示图片;如果没有,则显示联系人的名字的第一个字,将这个文字作为头像,并添加背景颜色。
截图:
主要功能:
1.显示圆形图像;
2.显示圆形文字;
3.文字大小与圆形半径的比例可以调整;
4.可以添加圆形边框;
5.图片、文字的显示始终是居中的;其中图片的居中规则是:如果图片宽大于高,那么截取以高为正方形的中间部分。如果图片高大于宽,那么截取以宽为正方形的中间部分。
6.由于是继承于ImageView,且在onDraw()时去掉了super.onDraw(),并覆写了设置drawable的函数,因此可以直接将此view赋值给类似Glide等第三方的库,使其直接加载图片,且图片为圆形(不需要做调整);
7.支持padding
注意事项:
暂时不支持wrap_content模式
圆形图像显示原理:
使用shader + matrix的方式显示圆形图片,其中圆形是有shader产生的,而居中的调整方式是由matrix设置的。
使用方法:
(1)设置图片或者文字的方法:
(2)与Glide的结合:
添加至工程
1.添加依赖
2.layout文件中添加此view
项目地址:
https://github.com/Carbs0126/AvatarImageView
https://github.com/Carbs0126/AvatarImageView
前言:
在做电话本或者其他应用时,显示联系人头像的策略一般是这样的:先判断是否有头像图片,如果有,则直接显示图片;如果没有,则显示联系人的名字的第一个字,将这个文字作为头像,并添加背景颜色。
截图:
主要功能:
1.显示圆形图像;
2.显示圆形文字;
3.文字大小与圆形半径的比例可以调整;
4.可以添加圆形边框;
5.图片、文字的显示始终是居中的;其中图片的居中规则是:如果图片宽大于高,那么截取以高为正方形的中间部分。如果图片高大于宽,那么截取以宽为正方形的中间部分。
6.由于是继承于ImageView,且在onDraw()时去掉了super.onDraw(),并覆写了设置drawable的函数,因此可以直接将此view赋值给类似Glide等第三方的库,使其直接加载图片,且图片为圆形(不需要做调整);
7.支持padding
注意事项:
暂时不支持wrap_content模式
圆形图像显示原理:
使用shader + matrix的方式显示圆形图片,其中圆形是有shader产生的,而居中的调整方式是由matrix设置的。
使用方法:
(1)设置图片或者文字的方法:
AvatarImageView aiv = (AvatarImageView) this.findViewById(R.id.aiv); //设置图像: aiv.setImageResource(R.drawable.id_014); //或者: aiv.setDrawable(drawable); //或者: aiv.setBitmap(bitmap); //或者: aiv.setImageDrawable(drawable); //设置文字: aiv.setTextAndColor("安", AvatarImageView.COLORS[0]);//直接设置颜色 //或者: aiv.setTextAndColorSeed("安","安卓");//“安卓”字样作为产生backgroundcolor的seed
(2)与Glide的结合:
Glide .with(activity) .load(picurl) .centerCrop() .crossFade() .into(aiv);
添加至工程
1.添加依赖
compile 'cn.carbs.android:AvatarImageView:1.0.1'
2.layout文件中添加此view
<cn.carbs.android.avatarimageview.library.AvatarImageView android:id="@+id/item_avatar" android:layout_width="60dp" android:layout_height="60dp" android:padding="5dp" />
项目地址:
https://github.com/Carbs0126/AvatarImageView
相关文章推荐
- 关于ListView中多个EditText之间相互联动导致无限循环问题的解决方法
- Orange’s学习笔记(一)
- MAC 系统--Mac下提升工作效率的方式
- html5默认情况下图片底部会有3-5px边距解决办法
- jquery中的cookie使用
- C语言:实现一个函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中
- 在linux环境下尝试使用gcc编译一个程序,并验证-E\-S\-c选项
- 【随笔】预定义符号_FILE__,__LINE__,__DATE__,__TIME__的使用
- 【随笔】#与 ##的使用含义与区别
- 【面试简答题(详谈)】宏与函数的区别
- C语言:字符数组的内容为;tneduts a ma i;,内容改为i am a student.只能开辟有限个空间
- 【面试常考】C语言:输入:&quot;student a am i&quot;,输出&quot;i am a student,不能使用库函数
- C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出&#39;b&#39;
- 【C语言】:字符串替换空格,输入“we are happy!”,输出”we%20are%20happy!“
- 【笔试题】C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出&#39;b&#39;。
- C语言:每瓶汽水1元,两个空瓶可以置换一瓶汽水,现在有20元,最多能喝多少瓶汽水。
- C语言:实现一个函数,可以左旋字符串中的k个字符。
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- C语言:自己动手查看float以及double类型的变量2.5在内存中的存储方式。