首先先把封装好的圆形头像代码放进去,这个类直接拿来用就好了CircleImageView.java

public class CircleImageView extends ImageView {private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;private static final int COLORDRAWABLE_DIMENSION = 1;private static final int DEFAULT_BORDER_WIDTH = 0;private static final int DEFAULT_BORDER_COLOR = Color.WHITE;private final RectF mDrawableRect = new RectF();private final RectF mBorderRect = new RectF();private final Matrix mShaderMatrix = new Matrix();private final Paint mBitmapPaint = new Paint();private final Paint mBorderPaint = new Paint();private int mBorderColor = DEFAULT_BORDER_COLOR;private int mBorderWidth = DEFAULT_BORDER_WIDTH;private Bitmap mBitmap;private BitmapShader mBitmapShader;private int mBitmapWidth;private int mBitmapHeight;private float mDrawableRadius;private float mBorderRadius;private boolean mReady;private boolean mSetupPending;public CircleImageView(Context context) {super(context);}public CircleImageView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public CircleImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);super.setScaleType(SCALE_TYPE);TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0);mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH);mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR);a.recycle();mReady = true;if (mSetupPending) {setup();mSetupPending = false;}}@Overridepublic ScaleType getScaleType() {return SCALE_TYPE;}@Overridepublic void setScaleType(ScaleType scaleType) {if (scaleType != SCALE_TYPE) {throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType));}}@Overrideprotected void onDraw(Canvas canvas) {if (getDrawable() == null) {return;}canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint);canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);setup();}public int getBorderColor() {return mBorderColor;}public void setBorderColor(int borderColor) {if (borderColor == mBorderColor) {return;}mBorderColor = borderColor;mBorderPaint.setColor(mBorderColor);invalidate();}public int getBorderWidth() {return mBorderWidth;}public void setBorderWidth(int borderWidth) {if (borderWidth == mBorderWidth) {return;}mBorderWidth = borderWidth;setup();}@Overridepublic void setImageBitmap(Bitmap bm) {super.setImageBitmap(bm);mBitmap = bm;setup();}@Overridepublic void setImageDrawable(Drawable drawable) {super.setImageDrawable(drawable);mBitmap = getBitmapFromDrawable(drawable);setup();}@Overridepublic void setImageResource(int resId) {super.setImageResource(resId);mBitmap = getBitmapFromDrawable(getDrawable());setup();}private Bitmap getBitmapFromDrawable(Drawable drawable) {if (drawable == null) {return null;}if (drawable instanceof BitmapDrawable) {return ((BitmapDrawable) drawable).getBitmap();}try {Bitmap bitmap;if (drawable instanceof ColorDrawable) {bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG);} else {bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG);}Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());drawable.draw(canvas);return bitmap;} catch (OutOfMemoryError e) {return null;}}private void setup() {if (!mReady) {mSetupPending = true;return;}if (mBitmap == null) {return;}mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);mBitmapPaint.setAntiAlias(true);mBitmapPaint.setShader(mBitmapShader);mBorderPaint.setStyle(Paint.Style.STROKE);mBorderPaint.setAntiAlias(true);mBorderPaint.setColor(mBorderColor);mBorderPaint.setStrokeWidth(mBorderWidth);mBitmapHeight = mBitmap.getHeight();mBitmapWidth = mBitmap.getWidth();mBorderRect.set(0, 0, getWidth(), getHeight());mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2);mDrawableRect.set(mBorderWidth, mBorderWidth, mBorderRect.width() - mBorderWidth, mBorderRect.height() - mBorderWidth);mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2);updateShaderMatrix();invalidate();}private void updateShaderMatrix() {float scale;float dx = 0;float dy = 0;mShaderMatrix.set(null);if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) {scale = mDrawableRect.height() / (float) mBitmapHeight;dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f;} else {scale = mDrawableRect.width() / (float) mBitmapWidth;dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f;}mShaderMatrix.setScale(scale, scale);mShaderMatrix.postTranslate((int) (dx + 0.5f) + mBorderWidth, (int) (dy + 0.5f) + mBorderWidth);mBitmapShader.setLocalMatrix(mShaderMatrix);}}

然后在布局文件中引用
<cn.com.ray.Tools.CircleImageView
android:id="@+id/img_logo"
android:layout_width="@dimen/size70"
android:layout_height="@dimen/size70"
android:layout_marginLeft="@dimen/size10"
android:layout_marginRight="@dimen/size10"
android:layout_marginTop="@dimen/size10"
app:border_color="@color/white"
app:border_width="@dimen/size2" />

如果需要外部阴影线,就使用
app:border_color=”@color/white”
app:border_width=”@dimen/size2”
并且在布局文件头部位置加xmlns:app=”http://schemas.android.com/apk/res-auto”

最后在Java文件中加入图片
memberlogoImageView.setImageResource(R.drawable.logo);(要先初始化该控件)

Android-圆形头像相关推荐

  1. Android 圆形头像的两种实现方式

    Android 圆形头像的两种实现方式 前言 这篇博客只是为了做一个记录而已,方便而后查询,核心代码都是直接采用鸿洋博客里面的代码的. 圆形头像在实际开发中实际很常见,一般来说,主要有两种实现方式: ...

  2. Android圆形头像图Circle ImageView

    <Android圆形头像图Circle ImageView> 需要处理的原始图(pic): 使用CircleImageView处理后的图(作为头像): 现在很多的应用都有设置头像的功能,如 ...

  3. android 圆形头像,自定义圆形ImageView

    <!--头像--><RelativeLayoutandroid:id="@+id/ll_petInfo"android:layout_width="50 ...

  4. Android 圆形头像实现

    调用这个类实现圆形头像,这个类可以放到Utils里,这里记录一下 import android.annotation.SuppressLint; import android.content.Cont ...

  5. android圆形头像边框,Android Studio实现带边框的圆形头像

    本文实例为大家分享了Android Studio实现带边框的圆形头像的具体代码,供大家参考,具体内容如下 效果显示: (没有边框的) (有边框的) 1.创建自定义ImagView控件 (1).没有边框 ...

  6. android圆形头像:相机相册加载图片到圆形头像

    这是现在很多软件里面很常用的功能: 首先说下布局:布局文件非常简单,使用的是一个自定义的圆形头像: 当点击圆形头像的时候弹出一个popWindow,然后点击拍照,相册的时候调用系统的相机和系统的相册 ...

  7. Android 圆形头像/有外边框的圆形头像CircleImageView自定义控件使用详解

    现在很主流使用圆形头像,还要带边框的一个圆圈圈,自己做的项目里就有这样的需求,大大小小好多地方. 本着能懒则懒的原则,把使用详解总结出来,(PS:不是控件详解). 基本上可以拿来就用,注释我也添加的比 ...

  8. Android圆形头像的绘制(三)之多人头像的实现

    上篇文章Android圆形图像的绘制(二)介绍了单人圆形头像的绘制,这篇文章也是圆形头像的最后一篇.多人头像存在的场景有很多,像一些社交软件,只要涉及到群聊的功能,基本上都会存在多人头像.下面介绍多人 ...

  9. QML做类似Android圆形头像

    前言 在移动端应用中,用户头像一般都是圆形的, 在Android开发中github上有专门生成圆形图片的库可以使用,传入一张正常照片就可以返回圆形图片,并用户头像设置.那么在QML中也可以实现相同的效 ...

  10. Android圆形头像轮播闪动实现

    项目中需要使用头像可以循环轮播的效果,哈哈,啥也不说,先上效果图, 不要看例子花里胡哨的,其实只是中间那四个头像啊!单独抽出来是右边这样的图片效果,这里是搞了个按钮开启自动更新的任务.         ...

最新文章

  1. drupal cve-2018-7600 远程代码执行漏洞 简介
  2. Java 策略模式和状态模式
  3. .NET Core+MySql+Nginx 容器化部署
  4. python学习实例(7)
  5. Vue el-input实现动态显示type为textarea的文字数量、剩余字数
  6. 用python画多来a梦-python 绘制哆啦A梦
  7. php消息实时推送技术,基于HTTP协议之WEB消息实时推送技术原理及实现
  8. [引]VS2005帮助文档 : 加密 概述
  9. 分享一篇去年的项目总结
  10. 天下会 - 搜索经验之网络搜索技巧总结
  11. Android虚拟机报错解决方法
  12. PowerDesigner清理注册表
  13. 保持激昂斗志的18种有效方法
  14. 高新技术企业认定专项审计报告包含报告?专审收费标准
  15. Ant Design Vue 组件或图标的引入和使用
  16. 常用开源监控系统分析推荐(必备知识)|附优质监控书籍资源
  17. Linux安装小企鹅输入法
  18. 配置mpls vpn MCE组网
  19. 微软输入法 ——当前时间 快捷键
  20. 酒店直播服务器系统,用ffmpeg+nginx服务器实现类似酒店视频直播系统

热门文章

  1. WebGoatV8.1(challenges)详细过关教程
  2. .jar和sources.jar及javadoc.jar三者的关系
  3. 17、MG90S舵机使用
  4. 购买虚拟服务器会计,购买云服务器在会计中怎么做账
  5. 洛谷4895 BZOJ3162 独钓寒江雪 树形dp 树哈希
  6. Linux 模拟网络丢包及延时
  7. Excel-VBA 快速上手(十一、字符串常用操作)
  8. 刘海洋《LaTex入门》学习笔记5
  9. HTML文件无法显示IE图标的解决方法
  10. 中科院计算所培训中心四季度课程安排