首先,定义定义圆形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. 如何在LINUX中开机、登陆、退出、定时、定期自动运行程序

    1.开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init.init根据配置文件继续引导过程,启动其它进程.通常情况下,修改放置在 /etc/rc或 /et ...

  2. MySQL Table Information

    show tables;                    --显示该数据库里的所有表show columns from 表名;         --显示表字段use information_sc ...

  3. cmder中文显示相关问题解决方案(1.3以上版本)

    cmder虽然Windows命令行的进阶版,虽然好看易用,但其中文编码一直是个问题.网上有不少博客给出解决方案,大部分都已因为版本更新失效.本文解决方案针对1.3以上版本的cmder用户 中文字体重叠 ...

  4. windows 10开启bash on windows,配置sshd,部署hadoop

    1.安装Bash on Windows 这个参考官网步骤,很容易安装,https://msdn.microsoft.com/en-us/commandline/wsl/install_guide 安装 ...

  5. JSP基础与提高(一).md

    JSP基础 JSP的由来 1.1. 为什么有JSP规范 Servlet技术产生以后,在使用过程中存在一个很大的问题,即为了表现页面的效果而需要输出大量的HTML标签,这些标签在Servlet中表现为一 ...

  6. PlantUML——3.Graphviz的安装

    官网:http://www.graphviz.org/Home.php   由于plantuml使用Graphviz来生成相关图形(只有序列图可以不依赖它),其它图形都需要, 因此得安装它,否则生成图 ...

  7. 域名 DNS命令——dig

    dig命令详解   1.查看域名的A记录          # dig yahoo.com; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.e ...

  8. ceph rgw java sdk 使用域名访问服务时需要设置s3client的配置项 PathStyleAccess 为true, 负责将报域名异常

    Caused by: java.net.UnknownHostException: my-new-bucket.s3.yyclouds.com at java.net.InetAddress.getA ...

  9. python基础(8)--迭代器、生成器、装饰器

    1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...

  10. 前端网页进度Loading

    loading随处可见,比如一个app经常会有下拉刷新,上拉加载的功能,在刷新和加载的过程中为了让用户感知到 load 的过程,我们会使用一些过渡动画来表达.最常见的比如“转圈圈”,“省略号”等等. ...