序言

在最近的项目中,有一个地方有很多Item,但是没有相应的图标,于是和设计商量用彩色圆形和第一个文字作为图标。于是就写了这个东西。

效果

实现

通过继承Drawable 使用的时候也很简单如下

 ImageView.setImageDrawable(new ColorCircleDrawable("A",Color.RED));

比较麻烦的是文字居中
感谢博客 Android Canvas drawText实现中文垂直居中 帮我理清了思路

源码

public class ColorCircleDrawable extends Drawable {String mTitle;Paint mPaint;int size;float titleSpace = 0.5f;Paint backgroundPaint;int cx, cy;private int radius;private int tx, ty;/*** * @param title 标题* @param color 背景色*/public ColorCircleDrawable(String title, int color) {mTitle = title;mPaint = new Paint();mPaint.setAntiAlias(true);mPaint.setColor(Color.WHITE);//文字水平居中mPaint.setTextAlign(Paint.Align.CENTER);backgroundPaint = new Paint();backgroundPaint.setStyle(Paint.Style.FILL_AND_STROKE);backgroundPaint.setColor(color);backgroundPaint.setAntiAlias(true);}@Overridepublic void draw(@NonNull Canvas canvas) {canvas.drawCircle(cx, cy, radius, backgroundPaint);//drawText中的,x和文字的Paint的Align属性有关//y是指文字baseLine的位置。canvas.drawText(mTitle, cx, ty, mPaint);}@Overrideprotected void onBoundsChange(Rect bounds) {size = Math.min(bounds.height(), bounds.width());int textSize = (int) (size * titleSpace / mTitle.length());mPaint.setTextSize(textSize);radius = size / 2;cx = bounds.width() / 2;cy = bounds.height() / 2;//正确获取字体的高度,在绘制的时候需要向上偏移fontMetricsInt.bottomPaint.FontMetricsInt fontMetricsInt = mPaint.getFontMetricsInt();int fontHeight = fontMetricsInt.bottom - fontMetricsInt.top;ty = cy + fontHeight / 2 - fontMetricsInt.bottom;}@Overridepublic void setAlpha(@IntRange(from = 0, to = 255) int alpha) {}@Overridepublic void setColorFilter(@Nullable ColorFilter colorFilter) {}@Overridepublic int getOpacity() {return PixelFormat.OPAQUE;}
}

自制圆形文字ICON相关推荐

  1. 可动态显示圆形图像或圆形文字的AvatarImageView

    项目地址 https://github.com/Carbs0126/AvatarImageView 前言: 在做电话本或者其他应用时,显示联系人头像的策略一般是这样的:先判断是否有头像图片,如果有,则 ...

  2. java圆形矩形直线文字设计图_如何设计圆形文字logo?怎么让文字按圆形走?圆形文字logo...

    美好的周末说过去一下子就过去了呢~今天又迎来了更加美好的周一哇,哈哈哈.好啦废话不多说,还是来看看今天的教程方案吧!圆形文字logo是什么意思呢?不知道大家有没有看到过那种圆形的标志,比如小编大学时候 ...

  3. [原创]可动态显示圆形图像或圆形文字的AvatarImageView

    项目地址: https://github.com/Carbs0126/AvatarImageView 前言: 在做电话本或者其他应用时,显示联系人头像的策略一般是这样的:先判断是否有头像图片,如果有, ...

  4. 设计一个圆形文字LOGO

    LOGO设计 每一个标志都是独一无二的,它们所代表的含义也是不一样的,我们应该不断学习,不断寻找新的灵感,去设计不一样的LOGO. 那我们开始啦! 设计上图LOGO教程如下: 1.点击插入字符按钮,输 ...

  5. uniapp switch开关插件带文字/icon图标 功能实现

    uniapp switch开关功能 最近公司电商app确认订单页面种配送方式由默认的快递改为了快递+自提的可选择配送方式. 这个功能是需要用到switch开关功能. 为了实现能够展示文字的这种方式,通 ...

  6. html中怎么把文字环绕圆形,Photoshop如何制作环绕圆形路径文字(章环绕的圆形文字)及使用技巧记录...

    今天在测试一个合同的自动打印章的功能,用到一个测试章,于是就自己瞎捣鼓了一下,这里记录一下日志,方便以后测试的时候用到.效果如下: 今天在测试一个合同的自动打印章的功能,用到一个测试章,于是就自己瞎捣 ...

  7. Android 自定义圆形文字头像

    因为最近做一个项目,需要用到圆形头像,然后中间显示用户名的第一个字符,记得之前网上有看到该开源库,但是忽然就找不到了,无奈,只能自己写一个控件. 该控件继承ImageView,主要有以下几个属性: 自 ...

  8. 自制新型文字密码,聊天记录的画风都不一样了,再也不怕被女朋友偷窥手机了!

    前言:当今社会是一个信息社会,你的个人信息和聊天记录极有可能被别有用心的人时时刻刻监视着,那么你想不想实现专属于两个人或一个小圈子的人在社交软件上的交流不被任何其他人读懂呢?下面就给大家提供一个原理极 ...

  9. 微信小程序把wx.showToast的文字提示长度增加的方法

    wx.showToast ({title: '文字文字文字文字文字文字文字文字文字文字',icon: 'none',duration: 2000,}); 关键就在icon:'none'

最新文章

  1. 局部图像描述子——SIFT(尺度不变特征变换)
  2. 「 深入浅出 」集合List
  3. Yolo-将coco数据集中的json文件转为txt且解决类别不连续问题
  4. 第十一篇:(顺序)容器的好伴侣 --- 容器适配器
  5. git wechat.class.php,wechat-php-sdk/qywechat.class.php at master · gitye/wechat-php-sdk · GitHub
  6. 解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法
  7. python归并排序算法实现_python算法实现系列-归并排序
  8. 设计模式学习总结——工厂模式
  9. robocode_Robocode策略
  10. suse linux 忘记root密码,SUSE linux 忘记root密码
  11. windows下如何制作和应用数字签名证书 全流程
  12. 遗传算法适应度函数的计算原理
  13. 计算机型号或配置,新手必看电脑配置及型号含义速成!
  14. Denoising point sets via L0 minimization
  15. python埃及分数_送你一份低折扣书单,Python就占了6本,人工智能2本
  16. 绿色数据中心空调设计 书评_书评:响应式设计工作流程
  17. 如何把照片背景变成透明?怎么把图片去白底变透明?
  18. STM32CubeIDE属于一站式工具,本文带你体验它的强大
  19. macd的python代码同花顺_缠论辅助同花顺Macd面积2种公式源代码
  20. RafyA PS合成作品欣赏(2)

热门文章

  1. 双色球--最多2个号码相同的内幕
  2. 第二届微软CRM中国群线下峰会
  3. 图片来自微信公众平台未经许可不可引用|解决经验分享
  4. 游戏算法-游戏AI状态机,python实现
  5. 第四阶段product笔记
  6. 2009年3月30日
  7. activetcl与spin的安装
  8. 映射网络驱动器方法 —— 网络硬盘挂载到本地
  9. 算法模型好坏、评价标准、算法系统设计
  10. 写时复制技术(摘自C语言中文网)