当前位置: 移动技术网 > IT编程>移动开发>Android > Android Studio实现带边框的圆形头像

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

李敖北大演讲,nmzsks,教师学习十八大精神心得体会

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

效果显示:

(没有边框的)

这里写图片描述 

(有边框的)

这里写图片描述

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代码

<chenglong.activitytest.pengintohospital.utils.imageviewplus
 android:id="@+id/mine_iv_headportrait"
 android:layout_width="150dp"
 android:layout_height="150dp"
 android:src="@mipmap/hospital" />


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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网