返回顶部
首页 > 资讯 > 精选 >Android应用中如何将头像图片变圆形
  • 849
分享到

Android应用中如何将头像图片变圆形

androidroi 2023-05-31 06:05:12 849人浏览 安东尼
摘要

本篇文章为大家展示了Android应用中如何将头像图片变圆形,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。实现步骤1.自定义一个转换工具类package com.common.base.util;i

本篇文章为大家展示了Android应用中如何将头像图片变圆形,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

实现步骤

1.自定义一个转换工具类

package com.common.base.util;import android.content.Context;import android.content.res.TypedArray;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.RectF;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;import com.common.base.R;public class CircleImageView extends ImageView {  private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888; private static final int COLORDRAWABLE_DIMENSioN = 1; private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; private final RectF mDrawableRect = new RectF(); private final RectF mBorderRect = new RectF(); private final Matrix mShaderMatrix = new Matrix(); private final Paint mBitmapPaint = new Paint(); private final Paint mBorderPaint = new Paint(); private int mBorderColor = DEFAULT_BORDER_COLOR; private int mBorderWidth = DEFAULT_BORDER_WIDTH; private Bitmap mBitmap; private BitmapShader mBitmapShader; private int mBitmapWidth; private int mBitmapHeight; private float mDrawableRadius; private float mBorderRadius; private boolean mReady; private boolean mSetupPending; public CircleImageView(Context context) {  super(context); } public CircleImageView(Context context, AttributeSet attrs) {  this(context, attrs, 0); } public CircleImageView(Context context, AttributeSet attrs, int defStyle) {  super(context, attrs, defStyle);  super.setScaleType(SCALE_TYPE);  TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0);  mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH);  mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR);  a.recycle();  mReady = true;  if (mSetupPending) {   setup();   mSetupPending = false;  } } @Override public ScaleType getScaleType() {  return SCALE_TYPE; } @Override public void setScaleType(ScaleType scaleType) {  if (scaleType != SCALE_TYPE) {   throw new IllegalArgumentException(String.fORMat("ScaleType %s not supported.", scaleType));  } } @Override protected void onDraw(Canvas canvas) {  if (getDrawable() == null) {   return;  }  canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint);  canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {  super.onSizeChanged(w, h, oldw, oldh);  setup(); } public int getBorderColor() {  return mBorderColor; } public void setBorderColor(int borderColor) {  if (borderColor == mBorderColor) {   return;  }  mBorderColor = borderColor;  mBorderPaint.setColor(mBorderColor);  invalidate(); } public int getBorderWidth() {  return mBorderWidth; } public void setBorderWidth(int borderWidth) {  if (borderWidth == mBorderWidth) {   return;  }  mBorderWidth = borderWidth;  setup(); } @Override public void setImageBitmap(Bitmap bm) {  super.setImageBitmap(bm);  mBitmap = bm;  setup(); } @Override public void setImageDrawable(Drawable drawable) {  super.setImageDrawable(drawable);  mBitmap = getBitmapFromDrawable(drawable);  setup(); } @Override public void setImageResource(int resId) {  super.setImageResource(resId);  mBitmap = getBitmapFromDrawable(getDrawable());  setup(); } private Bitmap getBitmapFromDrawable(Drawable drawable) {  if (drawable == null) {   return null;  }  if (drawable instanceof BitmapDrawable) {   return ((BitmapDrawable) drawable).getBitmap();  }  try {   Bitmap bitmap;   if (drawable instanceof ColorDrawable) {    bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG);   } else {    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG);   }   Canvas canvas = new Canvas(bitmap);   drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());   drawable.draw(canvas);   return bitmap;  } catch (OutOfMemoryError e) {   return null;  } } private void setup() {  if (!mReady) {   mSetupPending = true;   return;  }  if (mBitmap == null) {   return;  }  mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);  mBitmapPaint.setAntiAlias(true);  mBitmapPaint.setShader(mBitmapShader);  mBorderPaint.setStyle(Paint.Style.STROKE);  mBorderPaint.setAntiAlias(true);  mBorderPaint.setColor(mBorderColor);  mBorderPaint.setStrokeWidth(mBorderWidth);  mBitmapHeight = mBitmap.getHeight();  mBitmapWidth = mBitmap.getWidth();  mBorderRect.set(0, 0, getWidth(), getHeight());  mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2);  mDrawableRect.set(mBorderWidth, mBorderWidth, mBorderRect.width() - mBorderWidth, mBorderRect.height() - mBorderWidth);  mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2);  updateShaderMatrix();  invalidate(); } private void updateShaderMatrix() {  float scale;  float dx = 0;  float dy = 0;  mShaderMatrix.set(null);  if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) {   scale = mDrawableRect.height() / (float) mBitmapHeight;   dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f;  } else {   scale = mDrawableRect.width() / (float) mBitmapWidth;   dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f;  }  mShaderMatrix.setScale(scale, scale);  mShaderMatrix.postTranslate((int) (dx + 0.5f) + mBorderWidth, (int) (dy + 0.5f) + mBorderWidth);  mBitmapShader.setLocalMatrix(mShaderMatrix); }}

--结束END--

本文标题: Android应用中如何将头像图片变圆形

本文链接: https://lsjlt.com/news/224024.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android应用中如何将头像图片变圆形
    本篇文章为大家展示了Android应用中如何将头像图片变圆形,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。实现步骤1.自定义一个转换工具类package com.common.base.util;i...
    99+
    2023-05-31
    android roi
  • Android之头像图片变圆形显示
    一:先上效果图 二:实现步骤 1.自定义一个转换工具类 package com.common.base.util; import android.content.Conte...
    99+
    2022-06-06
    图片 Android
  • css如何将图片变成圆角矩形
    在css中将图片变成圆角矩形的方法:1.添加图片;2.使用border-radius属性设置图片为圆角矩形;在css中将图片变成圆角矩形的方法首先,在页面中添加一张图片;<!DOCTYPE html><html&...
    99+
    2024-04-02
  • Android应用中在对头像进行圆形处理
    本篇文章给大家分享的是有关Android应用中在对头像进行圆形处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Glide实现圆形图像Glide.with(mContext) ...
    99+
    2023-05-31
    android roi
  • php如何将图片设置为圆形图片
    这篇文章主要讲解了“php如何将图片设置为圆形图片”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何将图片设置为圆形图片”吧!php将图片设置为圆形图片的方法:1、创建一个PHP示例文...
    99+
    2023-06-25
  • Android应用中绘制圆形头像的方法解析
    要画这种圆形带阴影的头像,个人分解成三个图层 1,先画头像边缘的渐变 RadialGradient gradient = new RadialGradient(j/2,k/...
    99+
    2022-06-06
    方法 Android
  • Android实现本地上传图片并设置为圆形头像
    先从本地把图片上传到服务器,然后根据URL把头像处理成圆形头像。 因为上传图片用到bmob的平台,所以要到bmob(http://www.bmob.cn)申请密钥。 效果图: ...
    99+
    2022-06-06
    上传图片 图片 Android
  • iOS如何将图片裁剪成圆形
    本文实例为大家分享了iOS将图片裁剪成圆形的具体代码,供大家参考,具体内容如下 原图: 圆形图片裁剪效果: 裁剪成带边框的圆形图片: 核心代码: #import <U...
    99+
    2022-05-21
    iOS 图片裁剪
  • 如何用CSS将正方形图片显示为圆形图片布局
    本篇内容主要讲解“ 如何用CSS将正方形图片显示为圆形图片布局”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ 如何用CSS将正方形图片显示为圆形图片布局”吧! ...
    99+
    2024-04-02
  • Android中使用Bitmap类将矩形图片转为圆形的方法
    一般要做正圆形图片,只能是正方形的基础上才能实现,否则就变成椭圆了,下面说说如何使长方形的图片生成正圆形图片 废话不多说,没图没真相,先上图吧: 原图: 变成正圆后: ...
    99+
    2022-06-06
    矩形图片 方法 图片 bitmap Android
  • 怎么在Android中利用ImageView将图片进行圆形、圆角处理
    本篇文章给大家分享的是有关怎么在Android中利用ImageView将图片进行圆形、圆角处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。基本思路是,自定义一个ImageVi...
    99+
    2023-05-31
    android imageview age
  • css中的图片如何变圆
    这篇文章主要讲解了“css中的图片如何变圆”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css中的图片如何变圆”吧! 在css中...
    99+
    2024-04-02
  • 如何给Android应用设置圆角图片
    本篇文章给大家分享的是有关如何给Android应用设置圆角图片,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。主要原理是使用系统自带api:RoundedBitmapDrawab...
    99+
    2023-05-31
    android roi
  • Android如何将Glide动态加载不同大小的图片切圆角与圆形
    这篇文章主要介绍了Android如何将Glide动态加载不同大小的图片切圆角与圆形,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Glide加载动态图片首先我们先要去依赖一个g...
    99+
    2023-05-30
    android glide
  • Android中使用CircleImageView和Cardview制作圆形头像的方法
    圆形头像在我们的日常使用的app中很常见,因为圆形的头像比较美观. 使用圆形图片的方法可能有我们直接将图片裁剪成圆形再在app中使用,还有就是使用自定义View对我们设置的任何...
    99+
    2022-06-06
    方法 cardview Android
  • 利用Android中BitmapShader制作自带边框的圆形头像
    效果如下: BitmapShader 的简单介绍 关于 Shader是什么,Shader的种类有哪几种以及如何使用不属于本文范畴,对这方面不是很了解的同学,建议先去学习一下 ...
    99+
    2022-06-06
    Android
  • Android 自定义圆形头像CircleImageView支持加载网络图片的实现代码
    在Android开发中我们常常用到圆形的头像,如果每次加载之后再进行圆形裁剪特别麻烦。所以在这里写一个自定义圆形ImageView,直接去加载网络图片,这样的话就特别的方便。 ...
    99+
    2022-06-06
    网络图 自定义 图片 Android
  • 如何使用纯CSS实现圆形图像?
    小编给大家分享一下如何使用纯CSS实现圆形图像?,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   SS可以实现网页中的很多效...
    99+
    2024-04-02
  • C#如何使用OpenCV剪切图像中的圆形和矩形
    这篇文章主要介绍“C#如何使用OpenCV剪切图像中的圆形和矩形”,在日常操作中,相信很多人在C#如何使用OpenCV剪切图像中的圆形和矩形问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#如何使用OpenC...
    99+
    2023-06-07
  • Android应用中如何将头像保存到本地服务器
    Android应用中如何将头像保存到本地服务器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体代码如下所述:public class MainActivi...
    99+
    2023-05-31
    android roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作