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;

	}
时间: 2024-08-13 18:48:18

android在如果绘制自定义的bitmap,然后返回给ImageView的相关文章

Android进阶之绘制-自定义View完全掌握(五)

在自定义类继承View实现自定义控件的过程中,我们还应该对一些自定义属性有所了解. 我们通过一个案例来学习一下. 新建一个android项目,然后我们创建一个类MyAttributeView继承View. 贴出MyAttributeView的代码. package com.itcast.test0501; import android.content.Context; import android.support.annotation.Nullable; import android.util.

Android进阶之绘制-自定义View完全掌握(四)

前面的案例中我们都是使用系统的一些控件通过组合的方式来生成我们自定义的控件,自定义控件的实现还可以通过自定义类继承View来完成.从该篇博客开始,我们通过自定义类继承View来实现一些我们自定义的控件. 我们通过一个案例来学习,现在来实现这样一个效果. 我们新建一个类MyToggleButton,让它继承View. 注意,一定要重写带两个参数的构造方法,因为如果我们在布局文件使用该类,将会用这个构造方法实例该类,如果没有就崩溃. 介绍一下一个控件从创建到显示过程中的主要方法. 执行构造方法实例化

Android进阶之绘制-自定义View完全掌握(二)

这是自定义View系列的第二篇博客,我们继续来学习关于自定义View的知识. 今天我们来实现一下广告条案例. 我们要实现的是这样的一个效果. 要想实现这样的效果,我们可以借助ViewPager控件,然后加上自定义的一些控件即可完成.那么现在就开始吧. 新建一个android项目. 修改activity_main.xml文件. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:a

Android进阶之绘制-自定义View完全掌握(三)

自定义View系列的第三篇博客,我们来学习如何实现自定义下拉框. 今天的程序,我们来实现这样的一个效果. 布局非常简单,我们直接开始编码. 修改activity_main.xml文件的代码. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:

Android进阶之绘制-自定义View完全掌握(一)

Android的UI设计可以说是决定一个app质量的关键因素,因为人们在使用app的时候,最先映入眼帘的就是app的界面了,一个美观.充实的界面能够给用户带来非常好的体验,会在用户心中留下好的印象. 对于UI设计,Android原生的控件加上一些开源库的使用,已经能够满足大部分的UI需求,但是,某些比较新颖.花哨的控件效果,我们只能通过自定义View来实现,那么,从该篇博客开始,我将记录关于Android自定义View的学习内容,并将其整理呈现给大家. 我们来实现一个优酷菜单案例,在案例中会涉及

Android中使用ListView绘制自定义表格(2)

上回再写了<Android中使用ListView绘制自定义表格>后,很多人留言代码不全和没有数据样例.但因为项目原因,没法把源码全部贴上来.近两天,抽空简化了一下,做了一个例子. 效果图如 一.功能: 1.支持列合并 2.考虑了界面刷新优化 3.预留部分接口 4.支持左右滚动 1.枚举类:CellTypeEnum package csdn.danielinbiti.custometableview.item; public enum CellTypeEnum { STRING //字符 ,DI

Android中使用ListView绘制自定义表格(3)

把自定义表格又改进了一下,可以支持行合并.表格分为简单和复杂两种模式 1.简单模式就是<Android中使用ListView绘制自定义表格(2)>描述的方式.不支持行合并 2.复杂模式支持行列合并 1.基于上回上传的代码,改动文件如下 package csdn.danielinbiti.custometableview.item; public class ItemCell { private String cellValue = "";//单元格的值 private in

android开发笔记之自定义开关按钮

今天来讲讲自定义单个控件,就拿开关按钮来讲讲,相信大家见了非常多这样的了,先看看效果: 我们可以看到一个很常见的开关按钮,那就来分析分析. 首先: 这是由两张图片构成: ①一张为有开和关的背景图片 ②一张为控制开和关的滑动按钮 第一步: 写个类继承View,并重写几个方法: 第一个为构造函数,重写一个参数的函数和两个参数的函数就够了,因为两个参数的函数能够使用自定义属性 第二个为控制控件的大小–>protected void onMeasure(int widthMeasureSpec, int

Android知识梳理之自定义View

虽然android本身给我们提供了形形色色的控件,基本能够满足日常开发的需求,但是面对日益同质化的app界面,和不同的业务需求.我们可能就需要自定义一些View来获得比较好的效果.自定义View是android开发者走向高级开发工程师必须要走的一关. 转载请标明出处:http://blog.csdn.net/unreliable_narrator/article/details/51274264 一,构造函数: 当我们创建一个类去继承View的时候,会要求我们至少去实现一个构造函数. publi