当前位置: 首页 > news >正文

android在假设绘制自己定义的bitmap,然后返回给ImageView

先来说一下FontMetrics这个类。这个类是关于字符属性和測量的类



用图能够更精确的知道各个属性的含义:



我们在Layout中有一个ImageView,我们能够通过:

<span style="white-space:pre">		</span>ImageView item_image = (ImageView)findViewById(R.id.item_image);
		item_image.setImageBitmap(makeMessageCenterIcon());

这样的方式来把bitmap来填入ImageView


以下做一个这样的效果的。特别适合有消息通知的icon:


代码能够这样来写:

protected Bitmap makeMessageCenterIcon(){
		int mMsgCnt = 4;
		Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.desktop_messageicon);
		if(icon == null){
			return icon;
		}
		
		//make notice icon
		if(mMsgCnt > 0) {
			Bitmap noticeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.notice_count_bg);
			if(noticeIcon != null){
				int h = noticeIcon.getHeight();
				int w = noticeIcon.getWidth();
				
				
				Bitmap noticeIconBmp = Bitmap.createBitmap(w, h, Config.ARGB_8888);//noticeIconBmp是终于须要的画字的bitmap
				Canvas noticeCanvas = new Canvas(noticeIconBmp);
				Paint noticeCntpaint = new Paint();
				noticeCntpaint.setAntiAlias(true);
				noticeCanvas.drawBitmap(noticeIcon, 0, 0, noticeCntpaint);
				noticeCntpaint.setTextAlign(Align.CENTER);
				noticeCntpaint.setColor(getResources().getColor(R.drawable.white));
				
				FontMetrics fontMetrics = noticeCntpaint.getFontMetrics(); 
				float x = noticeIcon.getWidth() / 2;
				float y = (noticeIcon.getHeight() - fontMetrics.ascent) / 2 - 2;  //fontMetrics是在baseline以上的字符最高处的位置
				noticeCanvas.drawText(String.valueOf(mMsgCnt), x, y, noticeCntpaint);  //在canvas上的(x,y)的位置上写mMsgCnt
				
				//draw notice icon onto message icon
				h = icon.getHeight();
				w = icon.getWidth();
				Bitmap iconBmp = Bitmap.createBitmap(w, h, Config.ARGB_8888);
				Canvas canvas = new Canvas(iconBmp);
				
				Paint paint = new Paint();
				paint.setAntiAlias(true);
				canvas.drawBitmap(icon, 0, 0, paint);
				float left = icon.getWidth() - noticeIcon.getWidth();
				float top = 0;
				canvas.drawBitmap(noticeIconBmp, left, top, paint);
				
				return iconBmp;
			}
		}
		return icon;
		
	}


相关文章:

  • 通过读取excel文件生成sql语句
  • 指针知识梳理5-字符串与指针,程序内存总结
  • 使用360浏览器访问字体逆时针旋转90度的问题
  • Shell脚本实现自动修改IP地址
  • 参数的排列组合
  • 在当今快节奏的软件更迭当中,我们是否还需要进行系统的学习?
  • JSTL截取字符串
  • Java开发相关配置
  • Java BIO、NIO、AIO-------转载
  • JSPatch
  • RSA加密的测试demo
  • 用 Python 开发自动化测试脚本
  • 运用.net core配合VS 2015制作nuget包
  • linux shell数据重定向(输入重定向与输出重定向)详细分析 上(转)
  • PHP开发学习门户改版效果图投票
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • CentOS7简单部署NFS
  • create-react-app做的留言板
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • IDEA常用插件整理
  • Java程序员幽默爆笑锦集
  • Mocha测试初探
  • Python学习之路16-使用API
  • win10下安装mysql5.7
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 对象引论
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 时间复杂度与空间复杂度分析
  • 试着探索高并发下的系统架构面貌
  • 思考 CSS 架构
  • 由插件封装引出的一丢丢思考
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​Spring Boot 分片上传文件
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $.ajax()
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (理论篇)httpmoudle和httphandler一览
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)nsfocus-绿盟科技笔试题目
  • (轉貼) UML中文FAQ (OO) (UML)
  • .NET Framework .NET Core与 .NET 的区别
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net中的Queue和Stack
  • @Autowired自动装配
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)