文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-05-30 19:35

关注

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

效果显示:

(没有边框的)

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

(有边框的)

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

创建自定义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;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); }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯