首先,定义定义圆形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. Java多线程学习(七)并发编程中一些问题

    本节思维导图: 关注微信公众号:"Java面试通关手册" 回复"Java多线程"获取思维导图源文件和思维导图软件. 多线程就一定好吗?快吗?? 并发编程的目的就 ...

  2. mac 上使用octave的plot错误的解决办法

    在mac10.10上使用octave的时候,键入 plot(x, y)的时候会出现如下错误: ^ line : unknown or ambiguous terminal type; type jus ...

  3. SPOJ DQUERY D-query (在线主席树/ 离线树状数组)

    版权声明:本文为博主原创文章,未经博主允许不得转载. SPOJ DQUERY 题意: 给出一串数,询问[L,R]区间中有多少个不同的数 . 解法: 关键是查询到某个右端点时,使其左边出现过的数都记录在 ...

  4. nginx同域名动静态分离

    公司需求是如果是app加载静态页面的话要通过应用服务直接请求指定的服务  由于机房迁移  不得不将该文件迁移到一个指定的地方  需要通过nginx配置检测到是访问该静态页面的就转到该静态页面上面进行加 ...

  5. 20165301陈潭飞2017-2018-2 20165301 实验三《Java面向对象程序设计》实验报告

    2017-2018-2 20165301 实验三<Java面向对象程序设计>实验报告 一.敏捷开发与XP实践-1 实验要求: 在IDEA中使用工具(Code->Reformate C ...

  6. Erasure Coding(纠删码)深入分析 转

    1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是能够在一定程度上解决3副本空间浪费太多的问题.因为3副本这一点是swift推广的最大障碍之一,成本的增加吓 ...

  7. MVC公开课 – 1.基础 (2013-3-15广州传智MVC公开课)

    1.MVC设计模式 Model 是指 要处理的业务代码和数据操作代码 View 视图 主要是指的 跟用户打交道 并能够展示数据 Controller 看成是 Model和View的桥梁 优点: 1.1 ...

  8. virtualenv python的虚拟环境

    官网:https://virtualenv.pypa.io/en/stable/userguide/ virtualenv通过创建独立Python开发环境的工具, 来解决依赖.版本问题 基本使用: d ...

  9. c++ primer 2 变量和基本类型

    2.1 基本内置类型 基本内置类型是C++“自带”的类型,区别于标准库定义的类型.使用时不需要应用标准库就可以使用,我们可以理解为数字型有下面这些 整形:就是整数或者是没有小数位的数.它包括bool( ...

  10. SQL Server Connection Pooling (ADO.NET)

    SQL Server Connection Pooling (ADO.NET) Connecting to a database server typically consists of severa ...