1. package com.example.m_evolution;
  2.  
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Canvas;
  6. import android.graphics.Paint;
  7. import android.graphics.PorterDuff;
  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.support.annotation.Nullable;
  13. import android.util.AttributeSet;
  14. import android.widget.ImageView;
  15.  
  16. public class CircleImageView extends ImageView {
  17. private Paint paint;
  18.  
  19. public CircleImageView(Context context) {
  20. super(context);
  21. paint = new Paint();
  22. }
  23.  
  24. public CircleImageView(Context context, @Nullable AttributeSet attrs) {
  25. super(context, attrs);
  26. paint = new Paint();
  27. }
  28.  
  29. public CircleImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  30. super(context, attrs, defStyleAttr);
  31. paint = new Paint();
  32. }
  33.  
  34. //显示时调用的函数
  35. @Override
  36. protected void onDraw(Canvas canvas) {
  37. Drawable drawable = getDrawable(); //获取drawable
  38. if (drawable != null) {
  39. Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();//转换成bitmap
  40. Bitmap bitmap_circle = getCircleBitmap(bitmap); //将bitmap图片剪切成圆形
  41. final Rect rectSrc = new Rect(0, 0, bitmap_circle.getWidth(), bitmap_circle.getHeight());
  42. final Rect rectDest = new Rect(0,0,getWidth(),getHeight());
  43. paint.reset();
  44. canvas.drawBitmap(bitmap_circle, rectSrc, rectDest, paint);
  45. }
  46. else{
  47. super.onDraw(canvas);
  48. }
  49. }
  50.  
  51. //将bitmap图片剪切成圆形
  52. private Bitmap getCircleBitmap(Bitmap bitmap) {
  53. Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Bitmap.Config.ARGB_8888);
  54. Canvas canvas = new Canvas(output);
  55.  
  56. final int color = 0xff424242;
  57.  
  58. final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
  59. paint.setAntiAlias(true);
  60. canvas.drawARGB(0, 0, 0, 0);
  61. paint.setColor(color);
  62. int x = bitmap.getWidth();
  63.  
  64. canvas.drawCircle(x / 2, x / 2, x / 2, paint);
  65. paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
  66. canvas.drawBitmap(bitmap, rect, rect, paint);
  67. return output;
  68.  
  69. }
  70. }

圆形图片 ImageView的更多相关文章

  1. Android圆形图片--ImageView

    [ RoundImageView.java ] package com.dxd.roundimageview; import android.content.Context; import andro ...

  2. Android imageview显示圆形图片

    需要ImageView显示圆形图片做法如下 public static Bitmap toRoundCorner(Bitmap bitmap, float ratio) { System.out.pr ...

  3. Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框

     Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框 在Android早期的开发中,如果涉及到圆形图片的处理,往往需要借助于第三方的实现,见附录文章1,2.And ...

  4. android绘制圆形图片的两种方式

    看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把bitmap ...

  5. iOS常见用户头像的圆形图片裁剪常见的几种方法

    在开发中,基本上APP的用户头像的处理都需要把用户所上传的方形图片,处理为圆形图片.在这里就总结三种常见的处理圆形图片的方法. 1.使用位图上下文 2.使用UIView的layer进行处理 3.使用r ...

  6. Android_AsyncTaskDemo之QQ记步数(画圆形图片知识)

    今天学习了AsyncTask Android 的异步机制.我简单的实现我的一个小小案例--qq记步数.然后穿插一个画圆形图片的知识点. 由于所学知识有限,目前我计数,还有排名等等我就简单的利用随机数实 ...

  7. Android Glide+CircleImageView实现加载圆形图片列表

    需求:要在列表中实现圆形图片的显示,控件可能和加载库会存在冲突 先上代码,至于其中源码,以后有空再分析 MainActivity public class MainActivity extends A ...

  8. Android开发之自定义圆角矩形图片ImageView的实现

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...

  9. Android开发之自定义圆形的ImageView的实现

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然 ...

随机推荐

  1. Ollydbg中的内存断点和硬件断点的区别

    转载自: https://www.zhihu.com/question/52625624 旅人的回复 作者:旅人链接:https://www.zhihu.com/question/52625624/a ...

  2. 使用 ping++做支付的流程

    获取支付凭据 /// <summary> /// 获取支付凭据 /// </summary> /// <param name="model">& ...

  3. 没讲明白的水题orz

    有一道解释程序的水题没给非计算机专业的同学讲明白orz,在这里再练一下.. 源代码完全没有缩进真是难以忍受.. p.s.懂递归就不用看了#include <stdio.h> int n = ...

  4. sql server top 10 IO性能查询

    use master go ), ((case qs.statement_end_offset then datalength(qt.text) else qs.statement_end_offse ...

  5. DataStrom框架深造

    根据前一版DataStrom的使用,继续进行了改造和升级;前一版框架只是对服务按照名称注册和调用固化接口 最近研究后台框架,接触了ZBUS框架,我很喜欢ZBUS的前一版,该作者继续升级,已经在向AMQ ...

  6. Oracle监听已经启动了 sqlplus / as sysdba 仍然报 ERROR:ORA-12560

    我的Oracle是11g的 system 的密码忘记了, 但是scott的密码我还记得而且能登录 . 想以sqlplus /as sysdba 修改system密码 一直在报 ERROR:ORA-12 ...

  7. Gradle史上最详细解析

    转自:https://www.cnblogs.com/wxishang1991/p/5532006.html 郑重申明本文转自邓凡平老师的 http://www.infoq.com/cn/articl ...

  8. 装python package 时,conda提示会升级python2到python3,那可能是你的windows不支持py2env下的此包。

    装python package 时,conda提示会升级python2到python3, 那可能是你的windows不支持py2env下的此包.比如:win 下,tensorflow就不支持py2的环 ...

  9. dubbo rest服务 No provider available for the service 错误问题

    1.版本 dubbo 2.6.2 2.描述 消费者调用dubbo rest服务报No provider available for the service错误 网络上有讲是实体类未实现Serializ ...

  10. python url监控 并邮件报警

    import timeimport requestsimport smtplibfrom email.mime.text import MIMETextimport datetime def Send ...