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

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

(没有边框的)

f85419f5819a5e7e44f373a8ba370092.png 

(有边框的)

766883559c43f768f4b3fe700d50c9ec.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,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,(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 - mBorderWidth / 6.0f,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" />

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

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值