android固定桌面图标个数,Android 给应用程序的icon添加未读消息个数提示(红圈内数字)...

最近在做一个可以查看未读消息的功能,需要在界面中的Tab页的标签icon的右上角添加一个未读消息提示的功能。

先上个效果图出来,比较直观明白需求:

1988c3380e72fe7e1238ec0ac42d794a.png

思路上似乎有两种:

1. 直接把底图和红圆圈的图片用相对布局进行排列,在代码中动态更改红圆中的TextView的数字,并且识别一下各种情况下红圆的显示或者隐藏。这种方法比较直观。

2. 采用canvas画出圆和数字。

由于项目采用的是Tab页的形式,其中的RadioButton不适合采用相对布局。故我采用了第二种方式。将绘制的过程写成了工具方法。在需要的时候调用。便于以后的技术迁移。

直接上代码:

/**

* 绘制图标右上角的未读消息数量显示

*

* @param context

* 上下文

* @param icon

* 需要被添加的icon的资源ID

* @param news

* 未读的消息数量

* @return drawable

*/

@SuppressWarnings("unused")

public static Drawable displayNewsNumber(Context context, int icon, int news) {

// 初始化画布

int iconSize = (int) context.getResources().getDimension(

android.R.dimen.app_icon_size);

// Bitmap contactIcon = Bitmap.createBitmap(iconSize, iconSize,

// Config.ARGB_8888);

Bitmap iconBitmap = BitmapFactory.decodeResource(

context.getResources(), icon);

Canvas canvas = new Canvas(iconBitmap);

// 拷贝图片

Paint iconPaint = new Paint();

iconPaint.setDither(true);// 防抖动

iconPaint.setFilterBitmap(true);// 用来对Bitmap进行滤波处理

Rect src = new Rect(0, 0, iconBitmap.getWidth(), iconBitmap.getHeight());

Rect dst = new Rect(0, 0, iconBitmap.getWidth(), iconBitmap.getHeight());

canvas.drawBitmap(iconBitmap, src, dst, iconPaint);

// 启用抗锯齿和使用设备的文本字距

Paint countPaint = new Paint(Paint.ANTI_ALIAS_FLAG

| Paint.DEV_KERN_TEXT_FLAG);

countPaint.setColor(Color.RED);

canvas.drawCircle(iconSize - 13, 20, 10, countPaint);

Paint textPaint = new Paint();

textPaint.setColor(Color.WHITE);

// textPaint.setTypeface(Typeface.DEFAULT_BOLD);

textPaint.setTextSize(19f);

canvas.drawText(String.valueOf(news), iconSize - 18, 27, textPaint);

return new BitmapDrawable(iconBitmap);

}

调用语句:

if (count > 0) {//显示右上角未读消息提示

Drawable mineDrawable = BitmapUtil.displayNewsNumber(this,

R.drawable.icon_mine, count);

mineButton.setCompoundDrawablesWithIntrinsicBounds(null, null,

null, mineDrawable);//这里就是设置背景,自行发挥。

} else {//隐藏

Drawable defaultDrawable = getResources().getDrawable(

R.drawable.icon_mine);

mineButton.setCompoundDrawablesWithIntrinsicBounds(null, null,

null, defaultDrawable);

}

注:

1.count是未读消息的数量。

2.setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)可以在上、下、左、右设置图标,如果不想在某个地方显示,则设置为null。图标的宽高将会设置为固有宽高,既自动通过getIntrinsicWidth和getIntrinsicHeight获取。该方法是和在xml中设置Android:drawableTop="@drawable/icon_mine"的效果一样。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值