Android -- 自定义ImageView(圆形头像)
1. 原图
aaarticlea/png;base64,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" alt="" /> --》 aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAALEAAACXCAIAAADVvi25AAAJKUlEQVR4nO2dsWvjShDG358UlQJX19ll4BUxXHGYK45UwaQyaQ7zipBSuEoVcHPgdLni4KoHq8KwKgzrwrAqUqhwoeIKta/YPMXZOIlt7c7MyvPxVamc9c+zs6PVzF/RScRmb/ov9E/ApmZmgm2bmWDbZibYtpkJtm1mgm2bmWDbZibYtpkJtm1mgm2bmWDbZibYtpkJtm1mgm2bmWDbbjkTvW5v8GWw6WSSDC/ON//SPztF/5yk3ComBl8GN9fjZJKIVKiFrPaRzrVIxex+ZqDpdXvo/w6Ww2Yi7sTmpy9SsRcBO1Iyu5+NrkbHxkeQTMSdeHQ1+v3rwTkH7/Axvbs9EjgCY2J4cQ6Jwmuphby5HrcbjjCYiDtxMknKdYFIg6XZ/aytZFBngiANmxKpGHwdoK/SsTBBnIZNtYwMokyMrkZB0LCp6d1t3InRl66FTPS6PR8HSxiV62J0NUJfw1YxkUwS7K/VgUQqgk4/qTARd+J9K4+UVa6L4cU5+qoGzMTg6yC47GEXTe9u0dc2SCbasV+8JbWQwe0jmEzEnRi3KAmjcl2E9egVjYmWJRDvK6z0AoeJowKiVijHVAQm+menrcwod1EQWEAzccxAGNHHApSJuBMfORBGxLGAY+I4c4itIn4SAWKCgbBEGQsgJsJ9rOVPaiFpPkeFYKLdlcomUguJTgACE4OvA+yVJ63Z/QwdAlAmet0eHzQ+VDJJ0DmAY4Lzyh1F6jmZRyaIpBFFUeiVkpmUcyFSIVIhM6EWsnjUZVlif7oniVSgo+CdiV63h7vKxaOWc6EWUi2VXimdv/RK6ZVSSykzKTMhUlE8atwPTKeQ5YsJ3MOnXim1VMWj3tGGEplJkQqs4FGuCyJHUy9MjK5GKMtaS2ZC53sw8UTGSqmFlHOhVwrlYxM5g7hnAv2hhpwLne9Hw9aYgZIgU3hPxD0TWKmlzpVaSJEeEiHegsOEjaLQVQW0oehco+8gjpmADxJlWZhc0qSNroCwwoZawu0pN9fjVjEBHCREKtRSOufgDTieEw6RCplJT4joXLeHCcggoXNlfrgANGwPHuZAm3s5weJe3nTJBGSQkHOx12nTh2Umqj9e8gzcEpZLJsCChJw7SyQPQWEudK58/7OI1W5nTAwvzr2uUS1cIJ7Cg38hvkPmjAmYt3dMooe7Zehcy7n3WjhiWdMNE3En9rpAtWQmcYH4HwslM+8VLawnIG6YgClm+yg/NMFCLf1igXULyw0TMBuHidh0LOfeEwuU7cMBE2Abh1qS2DieQ4W3+kQtlEKFAyZgblyaLwCdAztUeM4qUE4fDpgAKFWV64LaxvEUKnLl9aYISkrhgAmA6zMyk+hVy7esln7rV/AphQMm/C1HrcPuyIDZaxULPqVoygRMMmGu1JK1XnkMFfApRVMmbq7HntZiU+i1y7dsYFVL6Y8J+OdhTZmASDDLkuzGAVCiqKoqMCYAEkyCR9BnJvxXuKvgmAC4yErzFGrs6f6EpcCYAFgRskyohcc0YlMhMQHzspfMiDKhV34LVrVCYgLgIIp+g+ZDLAAuczMTzyoK/Bs0Hxogo2ImnmVe7SVunXOcAGSCbHZpMeH7tWNm4lmBMOG9j0VITPguYobChO8qRUhM+L6/HwYTfO7YtPe9g8Yt7ffN5w5QJtC/710M8BiMmXgh+vWJovBe3mYmXoh4SgHTyyYkJvpnp76Xg3Jhu3jU/LxjiwFWhOwzMJiXiavgmIB5WEztAKJXCuaGlVFgTID1wUTnYNNlCdqzKzAmZvczsKUh8oqH71eHXyswJoD7FaEDUUDllbXgW541ZQKsPU1Fplbh+71hS/DNdZsyAdxrHR0LtYRuuwzfmcTBu4GQvxv07QO+tzx8szMHTECmmWVZ4jIBc3m/Fkr/VAdMAHfhRwwVkDUJo9+/HoJkAjilKNcFFhPwoz1Qem+76WcFnIqjNDFCGd2AMpfWDRPTu1vIlcJ6MAb5P1ZVVa4LeCCcMQE//Qv4wRh8JlHhjf1x1kcXOLSasR1wQMAeN4ywWm47YwKmOYklgP41WCNSEVvzO2MCZXhkURRecwuA/vtvCXGEh8tZDZDFq1pedxCUNKLCHvXjkgmsObOebtyAXaN6LdyRYI7ngWGNmnWOBSIQFVKbbV9MwLRG3CpXnSrMpDGs/6IiMHnW/XxRxKnU5bpoeBKRmUQfbI849ckXE4ihwuhgLGCa2L2vZJLgAuGFiQi81G3p4KchWKWIWuiTRT0ygTiyvFwfXrEA6C7yvigMK/fFRAR+qaJWw3IF4vaBnlp6ZyJCSjYbPkbH2j4QpwSCMtHr9oB3EJGKho2YzcRpyM9shDUiEJqJCPamv6tp1WohgSMc7iRqaCYisDPIn1ItpJua1UpBFjFJ7RpATEQB9mkHK2WW6wLldh0+E74TCx/9l2F6aRM5fCIwEZ1E/bNTH1gUj1pmbraM7ZuIz2hBKq9EYCJynW+aL8z3m+Y6V2oh1VI6b1qFMjiUHBORo0KWWiqZCcjZ5Xql1FKZlKX5568olafwmWiOhVpImUn4N4l1rmsWGwKBNZmeLhOHYWF+pq5Omw1jhsykGRhwGBDUTp4kmDBY7JhyilSYwIBOw8uwoUwZY6+wQXzLQGYi+vAk8qcUKYnAsEvY2KUpBeWkkgoTBovX5SydK5kJtaROw2sy5Fy8RTnZYyc5JqKTKO7ENRbFo5Zzgd6J5nAycqWWUs7F5iWMcl3QLEzRZcJ4dj8LHQgLC/MuIc3SdRhMRCfR+J8x+jfqkoyFnN7d0j9ikGYiOol63U8PPx/Qv1EHTKzU8HKIvp5tYMJ4eDkMegcJNzzQZSI6ieJOPPsxRf9297XMRP9zH3312smEcf9zn2xH/tfGfcPzWJiITqK4E4+/j4iTMb277XU/oa/VsTBR+/zbgFr6KTMx/j4KPXUImAnjXvdTMknQM9CHnw/n3wIrQ+3lkJgwjjvx8HIo/v0NjIJeqfZtE1sdHhO14058/m2QTBJ/fMhMzH5Mx99Hp3+HV4482AEzsemaj+Zph8zE9O52eDk8hpCw1S1hgu3QzATbNjPBts1MsG0zE2zbzATbNjPBts1MsG0zE2zbzATbNjPBts1MsG0zE2zbzATbNjPBtv0fqEaE/39lDLoAAAAASUVORK5CYII=" alt="" />
2. 自定义的控件类
package com.chaowen.yixin; import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView; public class RoundedImageView extends ImageView { public RoundedImageView(Context context) {
super(context);
// TODO Auto-generated constructor stub
} public RoundedImageView(Context context, AttributeSet attrs) {
super(context, attrs);
} public RoundedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
} @Override
protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable == null) {
return;
} if (getWidth() == 0 || getHeight() == 0) {
return;
}
Bitmap b = ((BitmapDrawable)drawable).getBitmap() ;
Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); int w = getWidth(), h = getHeight(); Bitmap roundBitmap = getCroppedBitmap(bitmap, w);
canvas.drawBitmap(roundBitmap, 0,0, null); } public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
Bitmap sbmp;
if(bmp.getWidth() != radius || bmp.getHeight() != radius)
sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);
else
sbmp = bmp;
Bitmap output = Bitmap.createBitmap(sbmp.getWidth(),
sbmp.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output); final int color = 0xffa19774;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(Color.parseColor("#BAB399"));
canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f,
sbmp.getWidth() / 2+0.1f, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(sbmp, rect, rect, paint); return output;
} }
3. 使用控件
<com.chaowen.yixin.RoundedImageView
android:id="@+id/headImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="25.0dip"
android:adjustViewBounds="true"
android:maxHeight="80dip"
android:maxWidth="80dip"
android:src="@drawable/head_default_yixin" />
4. ok 大功告成
Android -- 自定义ImageView(圆形头像)的更多相关文章
- Android自定义ImageView圆形头像
效果图: 代码如下: RoundImageView.java import cn.comnav.evaluationsystem.R; import android.content.Context; ...
- Android ImageView圆形头像
转载自:http://m.oschina.net/blog/321024 Android ImageView圆形头像 图片完全解析 我们在做项目的时候会用到圆形的图片,比如用户头像,类似QQ.用户在用 ...
- 【转】Android ImageView圆形头像
Android ImageView圆形头像 图片完全解析 我们在做项目的时候会用到圆形的图片,比如用户头像,类似QQ.用户在用QQ更换头像的时候,上传的图片都是矩形的,但显示的时候确是圆形的. 原理: ...
- Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
Android中的ImageView只能显示矩形的图片,为了用户体验更多,Android实现圆角矩形,圆形或者椭圆等图形,一般通过自定义ImageView来实现,首先获取到图片的Bitmap,然后通过 ...
- 【Android】自己定义圆形ImageView(圆形头像 可指定大小)
近期在仿手Q的UI,这里面常常要用到的就是圆形头像,看到 在android中画圆形图片的几种办法 这篇文章,了解了制作这样的头像的原理.只是里面提供的方法另一个不足的地方就是不能依据实际需求改变图片的 ...
- Android 自定义 View 圆形进度条总结
Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...
- Android 自定义ImageView支持缩放,拖拽,方便复用
今天刚发了一篇关于ImageView的缩放和拖拽的博客,然后我想了下,将他自定义下,方便我们来复用这个imageView,效果我就不多说了,http://blog.csdn.net/xiaanming ...
- Android 自定义view --圆形百分比(进度条)
转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50334595 注:本文由于是在学习过程中写的,存在大量问题(overdraw onDr ...
- android 自定义图片圆形进度条
感觉话一个圆形进度条挺简单的 ,但是却偏偏给了几张图片让你话,说实话我没接触过,感觉好难,还好百度有大把的资源,一番努力下终于画出来了. 代码如下. package com.etong.cpms.wi ...
随机推荐
- Delphi面向对象的方法
方法是属于一个给定对象的过程和函数,方法反映的是对象的行为而不是数据,前一篇提到的对象的两个重要的方法:构造方法和析构方法. 为了使对象能执行各种功能,你能在对象中定制方法 创建一个方法用两个步骤,首 ...
- settimeout,cleartimeout的使用分析
设置时间的定时轮回执行,大家想到的js也就是settimeout这个方法,这个方法确实能够实现定时反复执行的功能,clearttimeout这是清理或者是暂停轮回执行的情况.可是发现clearttim ...
- <转>JDBC获取DB元数据
原文链接:http://jiauwu.iteye.com/blog/1307617 package com.util.jdbc; import java.sql.Connection; import ...
- 数据结构之图 Part1
Part 1 预计使用7天的时间来过掉图相关的数据结构.第一天主要是一天图的基本概念,熟练掌握定义是一切交流和沟通的基础. 1定义 1.1图 有穷非空顶点,外加边. G(V,E) Graph Vert ...
- SQLServer 维护脚本分享(04)服务器角色和数据库角色相关操作
/*------------------------------------------------------------------------------------ [服务器级别-服务器角色] ...
- ZOOKEEPER3.3.3源码分析(四)对LEADER选举过程分析的纠正
很抱歉,之前分析的zookeeper leader选举算法有误,特此更正说明. 那里面最大的错误在于,leader选举其实不是在大多数节点通过就能选举上的,这一点与传统的paxos算法不同,因为如果这 ...
- Liferay 6.2 改造系列之十七:当Portlet无权限时,不显示错误信息
在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Set this to true if users are shown ...
- HTML5实践 -- 使用CSS3 Media Queries实现响应式设计
CSS3 Media用法介绍:http://www.w3cplus.com/content/css3-media-queries 转载请注明原创地址:http://www.cnblogs.com/so ...
- POJ 3274 HASH
题目链接:http://poj.org/problem?id=3274 题意+思路: 点击这里 补充:因为有减法运算,所以可能会造成运算后结果为负数,所以需要把结果统一转换成正数[不然数组下标访问不到 ...
- 04_Java面向对象特征之继承与多态
1. 继承 Java继承的实现(只支持单继承,而不是多继承,但有接口的多实现) 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类. 定义类时直接通过extends关键字指明要继承的父类.子类对 ...