文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android 给应用程序的icon添加未读消息个数提示(红圈内数字)

2022-06-06 01:18

关注

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

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

思路上似乎有两种:

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

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

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

直接上代码:


 
 @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
"的效果一样。

您可能感兴趣的文章:Android 未读消息的红点显示Android贝塞尔曲线初步学习第二课 仿QQ未读消息气泡拖拽黏连效果Android仿微信底部菜单栏功能显示未读消息数量Android仿QQ滑动弹出菜单标记已读、未读消息Android 桌面图标右上角显示未读消息数字Android仿QQ未读消息--红点拖拽删除【源代码】


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯