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

效果显示:

(没有边框的)

2967e438d37bf83986ba15c706032ed6.png

(有边框的)

13b130fa9721b971aca83362177c8126.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" />

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐