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

本文实例为大家分享了Android Studio实现带边框的圆形头像的具体代码,供大家参考,具体内容如下

效果显示:

(没有边框的)

10b02c1188a4342e40f04b4a45c91452.png

(有边框的)

644708b03dd9a7ed36f04c98ba6c2d39.png

1、创建自定义ImagView控件

(1)、没有边框的

package chenglong.activitytest.pengintohospital.utils;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapShader;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.Rect;

import android.graphics.Shader;

import android.graphics.drawable.BitmapDrawable;

import android.graphics.drawable.ColorDrawable;

import android.graphics.drawable.Drawable;

import android.util.AttributeSet;

import android.widget.ImageView;

/**

*

* 圆形图片

* Created by LICHENGLONG on 2017-10-09.

*/

public class mine_ImageViewPlus extends ImageView{

private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);

private Paint mPaintBorder = new Paint(Paint.ANTI_ALIAS_FLAG);

private Bitmap mRawBitmap;

private BitmapShader mShader;

private Matrix mMatrix = new Matrix();

private float mBorderWidth = dip2px(15);

private int mBorderColor = 0x80bebebe;

public mine_ImageViewPlus(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

protected void onDraw(Canvas canvas) {

Bitmap rawBitmap = getBitmap(getDrawable());

if (rawBitmap != null){

int viewWidth = getWidth();

int viewHeight = getHeight();

int viewMinSize = Math.min(viewWidth, viewHeight);

float dstWidth = viewMinSize;

float dstHeight = viewMinSize;

if (mShader == null || !rawBitmap.equals(mRawBitmap)){

mRawBitmap = rawBitmap;

mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

}

if (mShader != null){

mMatrix.setScale((dstWidth - mBorderWidth * 2) / rawBitmap.getWidth(), (dstHeight - mBorderWidth * 2) / rawBitmap.getHeight());

mShader.setLocalMatrix(mMatrix);

}

mPaintBitmap.setShader(mShader);

mPaintBorder.setStyle(Paint.Style.STROKE);

mPaintBorder.setStrokeWidth(mBorderWidth);

mPaintBorder.setColor(mBorderColor);

float radius = viewMinSize / 2.0f;

canvas.drawCircle(radius, radius, radius - mBorderWidth / 2.0f, mPaintBorder);

canvas.translate(mBorderWidth, mBorderWidth);

canvas.drawCircle(radius - mBorderWidth, radius - mBorderWidth, radius - mBorderWidth, mPaintBitmap);

} else {

super.onDraw(canvas);

}

}

private Bitmap getBitmap(Drawable drawable){

if (drawable instanceof BitmapDrawable){

return ((BitmapDrawable)drawable).getBitmap();

} else if (drawable instanceof ColorDrawable){

Rect rect = drawable.getBounds();

int width = rect.right - rect.left;

int height = rect.bottom - rect.top;

int color = ((ColorDrawable)drawable).getColor();

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);

canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));

return bitmap;

} else {

return null;

}

}

private int dip2px(int dipVal) {

float scale = getResources().getDisplayMetrics().density;

return (int)(dipVal * scale + 0.5f);

}

}

(2)、有边框的

package chenglong.activitytest.pengintohospital.utils;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapShader;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.Rect;

import android.graphics.Shader;

import android.graphics.drawable.BitmapDrawable;

import android.graphics.drawable.ColorDrawable;

import android.graphics.drawable.Drawable;

import android.util.AttributeSet;

import android.widget.ImageView;

/**

*

* 带边框的圆形图片

* Created by LICHENGLONG on 2017-10-09.

*/

public class ImageViewPlus extends ImageView{

private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);

private Paint mPaintBorder = new Paint(Paint.ANTI_ALIAS_FLAG);//

private Bitmap mRawBitmap;

private BitmapShader mShader;

private Matrix mMatrix = new Matrix();

private float mBorderWidth = dip2px(15);

private int mBorderColor = 0xFF0080FF;//外边框的颜色

public ImageViewPlus(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

protected void onDraw(Canvas canvas) {

Bitmap rawBitmap = getBitmap(getDrawable());

if (rawBitmap != null){

int viewWidth = getWidth();

int viewHeight = getHeight();

int viewMinSize = Math.min(viewWidth, viewHeight);

float dstWidth = viewMinSize;

float dstHeight = viewMinSize;

if (mShader == null || !rawBitmap.equals(mRawBitmap)){

mRawBitmap = rawBitmap;

mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

}

if (mShader != null){

mMatrix.setScale((dstWidth - mBorderWidth * 2) / rawBitmap.getWidth(), (dstHeight - mBorderWidth * 2) / rawBitmap.getHeight());

mShader.setLocalMatrix(mMatrix);

}

mPaintBitmap.setShader(mShader);

mPaintBorder.setStyle(Paint.Style.STROKE);

mPaintBorder.setStrokeWidth(mBorderWidth / 5.0f);//外边框的大小

mPaintBorder.setColor(mBorderColor);//添加外边框

float radius = viewMinSize / 2.0f;

canvas.drawCircle(radius, radius, radius - mBorderWidth / 6.0f, mPaintBorder);

canvas.translate(mBorderWidth, mBorderWidth);

canvas.drawCircle(radius - mBorderWidth, radius - mBorderWidth, radius, mPaintBitmap);

} else {

super.onDraw(canvas);

}

}

private Bitmap getBitmap(Drawable drawable){

if (drawable instanceof BitmapDrawable){

return ((BitmapDrawable)drawable).getBitmap();

} else if (drawable instanceof ColorDrawable){

Rect rect = drawable.getBounds();

int width = rect.right - rect.left;

int height = rect.bottom - rect.top;

int color = ((ColorDrawable)drawable).getColor();

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);

canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));

return bitmap;

} else {

return null;

}

}

private int dip2px(int dipVal) {

float scale = getResources().getDisplayMetrics().density;

return (int)(dipVal * scale + 0.5f);

}

}

2、创建页面xml代码

android:id="@+id/mine_iv_headportrait"

android:layout_width="150dp"

android:layout_height="150dp"

android:src="@mipmap/hospital" />

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值