首先,定义定义圆形Imageview类:

  1. import android.content.Context;
  2. import android.graphics.Bitmap;
  3. import android.graphics.Bitmap.Config;
  4. import android.graphics.Canvas;
  5. import android.graphics.Color;
  6. import android.graphics.Paint;
  7. import android.graphics.PorterDuff.Mode;
  8. import android.graphics.PorterDuffXfermode;
  9. import android.graphics.Rect;
  10. import android.graphics.drawable.BitmapDrawable;
  11. import android.graphics.drawable.Drawable;
  12. import android.util.AttributeSet;
  13. import android.widget.ImageView;
  14. public class RoundImageView extends ImageView {
  15. public RoundImageView(Context context) {
  16. super(context);
  17. // TODO Auto-generated constructor stub
  18. }
  19. public RoundImageView(Context context, AttributeSet attrs) {
  20. super(context, attrs);
  21. }
  22. public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
  23. super(context, attrs, defStyle);
  24. }
  25. @Override
  26. protected void onDraw(Canvas canvas) {
  27. Drawable drawable = getDrawable();
  28. if (drawable == null) {
  29. return;
  30. }
  31. if (getWidth() == 0 || getHeight() == 0) {
  32. return;
  33. }
  34. Bitmap b =  ((BitmapDrawable)drawable).getBitmap();
  35. if(null == b)
  36. {
  37. return;
  38. }
  39. Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
  40. int w = getWidth(), h = getHeight();
  41. Bitmap roundBitmap =  getCroppedBitmap(bitmap, w);
  42. canvas.drawBitmap(roundBitmap, 0,0, null);
  43. }
  44. public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
  45. Bitmap sbmp;
  46. if(bmp.getWidth() != radius || bmp.getHeight() != radius)
  47. sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);
  48. else
  49. sbmp = bmp;
  50. Bitmap output = Bitmap.createBitmap(sbmp.getWidth(),
  51. sbmp.getHeight(), Config.ARGB_8888);
  52. Canvas canvas = new Canvas(output);
  53. final int color = 0xffa19774;
  54. final Paint paint = new Paint();
  55. final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());
  56. paint.setAntiAlias(true);
  57. paint.setFilterBitmap(true);
  58. paint.setDither(true);
  59. canvas.drawARGB(0, 0, 0, 0);
  60. paint.setColor(Color.parseColor("#BAB399"));
  61. canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f,
  62. sbmp.getWidth() / 2+0.1f, paint);
  63. paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
  64. canvas.drawBitmap(sbmp, rect, rect, paint);
  65. return output;
  66. }
  67. }

然后在别的布局文件中使用该控件即可,如:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="@drawable/side_right"
  6. android:gravity="center"
  7. android:orientation="vertical" >
  8. <LinearLayout
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:gravity="center"
  12. android:layout_marginTop="35dip"
  13. android:orientation="vertical" >
  14. <<span style="color:#ff0000;">com.founder.reader.view.RoundImageView</span>
  15. android:id="@+id/right_login_head"
  16. android:layout_width="60dip"
  17. android:layout_height="60dip"
  18. android:scaleType="centerInside"
  19. android:src="@drawable/user" />

[转]android 自定义圆形imageview控件的更多相关文章

  1. android 自定义空间 组合控件中 TextView 不支持drawableLeft属性

    android 自定义空间 组合控件中 TextView 不支持drawableLeft属性.会报错Caused by: android.view.InflateException: Binary X ...

  2. (转载)Android自定义标签列表控件LabelsView解析

    Android自定义标签列表控件LabelsView解析 作者 donkingliang 关注 2017.03.15 20:59* 字数 759 阅读 406评论 0喜欢 3 无论是在移动端的App, ...

  3. Android自定义View和控件之一-定制属于自己的UI

    照例,拿来主义.我的学习是基于下面的三篇blog.前两是基本的流程,第三篇里有比较细致的绘制相关的属性.第4篇介绍了如何减少布局层次来提高效率. 1. 教你搞定Android自定义View 2. 教你 ...

  4. Android 自定义View修炼-如何打造Android自定义的下拉列表框控件

    一.概述 Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类似下图这样的 ...

  5. Android自定义控件进阶-打造Android自定义的下拉列表框控件

    技术:Android+java   概述 Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的 ...

  6. Android 如何打造Android自定义的下拉列表框控件

    一.概述 Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类似下图这样的 ...

  7. Android自定义标签列表控件LabelsView解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 无论是在移动端的App,还是在前端的网页,我们经常会看到下面这种标签的列表效果:   标签从左到右摆放,一行显示不下时自动换行.这样的效果用And ...

  8. Android自定义“图片+文字”控件四种实现方法之 二--------个人最推荐的一种

    http://blog.csdn.net/yanzi1225627/article/details/8633872 第二种方法也要新建一个图片+文字的xml布局文件,然后写一个类继承自LinearLa ...

  9. 自定义圆形图片控件CircleImageView的实现

    package com.loaderman.circleimageviewdemo; import android.content.Context; import android.content.re ...

随机推荐

  1. 1-spring xml 和 注解 解析过程

    spring mvc 入口 DispatcherServlet,类关系图如下所示 DispatcherServlet 就是一个 Servlet,那Servlet 的初始化方法 init()在哪里,通过 ...

  2. django框架<三>

    一.ORM操作  1.django orm创建数据库的方法 (1)指定连接pymysql(python3.x),先配置__init__.py import pymysql pymysql.instal ...

  3. [node.js] async/await如何优雅处理异常?

    node.js的世界,从callback开始,不会止于async. 所有人都在骂为什么不能完全进化,其实我感觉这就是老外的细心,为了承上.这也就是为什么async其实就是promise一样,假如不是一 ...

  4. acm专题---dfs+bfs

    题目来源:http://hihocoder.com/problemset/problem/1049 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描 ...

  5. HTML+CSS图文排版

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  6. python【项目】:工资管理(简易版)

    功能要求: 登录系统用户认证通过后才能列出下一级菜单员工信息表 登录系统要有用户登录.注册账号.删除账号.修改密码.退出 登录密码要有加密功能 从info.txt文件读取员工及工资信息,最后通过增加, ...

  7. 【hdoj_2100】Lovekey(大数+字符处理)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2100 根据题目意思,现将字符串转化为10进制,再采用10进制加法相加,再转化为26进制. 另一种直接的思路 ...

  8. markdown 测试代码

    这是 H1 这是 H2 这是 H3 这是 H4 这是 H5 这是 H6 A First Level Header A Second Level Header Now is the time for a ...

  9. 面试题13:在O(1)时间删除链表节点

    注意分情况讨论: 1. 要删除的不是尾节点 2. 链表只有一个节点 3. 链表中有多个节点,删除尾节点 void DeleteNode(ListNode** pListHead, ListNode* ...

  10. [实战]MVC5+EF6+MySql企业网盘实战(14)——逻辑重构

    写在前面 上篇文章关于修改文件夹和文件名称导致的找不到物理文件的问题,这篇文章将对其进行逻辑的修改. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6 ...