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

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

b84c6d44ff1cf8a61e7c9bf787bca9ae.png

用图可以更精确的知道各个属性的含义:

2a817df63a869350c2a65ad00a4262e8.png

我们在Layout中有一个ImageView,我们可以通过:

ImageView item_image = (ImageView)findViewById(R.id.item_image);

item_image.setImageBitmap(makeMessageCenterIcon());

这种方式来把bitmap来填入ImageView

下面做一个这种效果的,特别适合有消息通知的icon:

c01639706d120ed28ef4ee9479590b29.png

代码可以这样来写:

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;

}

原文:http://blog.csdn.net/baidu_nod/article/details/38167037

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值