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

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

效果显示:

(没有边框的)

22498ee58b3fa0a22970b6015ea01e2c.png

(有边框的)

d2aa4ed336e5e622041acbcec1919097.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、付费专栏及课程。

余额充值