在现在大部分的信息发布类应用,都有这样的一个功能:当后台数据更新,比如有系统消息或者是用户间有互动的时候,通过在控件上显示一个小红点来提示用户有新的信息。一般来说,这种业务需求,我们可以在布局文件中隐藏一个小红点,然后当检测到有数据更新的时候,我们将隐藏的小红点显示即可。但是这种方案,存在一些弊端,比如使用不方便,需要在很多界面添加小红点的布局,而且使用起来不灵活。

今天这篇文章,给大家介绍一个开源第三方控件——BadgeView,来实现相同的功能,而且使用起来非常的方便,非常强大。

先看一下界面效果图

我们可以看到,效果非常棒,各种需求都能满足,而且还可以添加自定义的动画效果,瞬间让你的APP变得高大上!

下面,具体介绍BadgeView的各种效果的使用

  1. // 默认的badge效果
  2. View target = findViewById(R.id.default_target);
  3. BadgeView badge = new BadgeView(this, target);
  4. badge.setText("1");
  5. badge.show();
  6. // 设置位置
  7. btnPosition = (Button) findViewById(R.id.position_target);
  8. badge1 = new BadgeView(this, btnPosition);
  9. badge1.setText("12");
  10. badge1.setBadgePosition(BadgeView.POSITION_BOTTOM_LEFT);
  11. btnPosition.setOnClickListener(new OnClickListener() {
  12. @Override
  13. public void onClick(View v) {
  14. badge1.toggle();
  15. }
  16. });
  17. // 设置显示文本/字体颜色/背景颜色
  18. btnColour = (Button) findViewById(R.id.colour_target);
  19. badge2 = new BadgeView(this, btnColour);
  20. badge2.setText("New!");
  21. badge2.setTextColor(Color.BLUE);
  22. badge2.setBadgeBackgroundColor(Color.YELLOW);
  23. badge2.setTextSize(12);
  24. btnColour.setOnClickListener(new OnClickListener() {
  25. @Override
  26. public void onClick(View v) {
  27. badge2.toggle();
  28. }
  29. });
  30. // 默认动画效果
  31. btnAnim1 = (Button) findViewById(R.id.anim1_target);
  32. badge3 = new BadgeView(this, btnAnim1);
  33. badge3.setText("84");
  34. btnAnim1.setOnClickListener(new OnClickListener() {
  35. @Override
  36. public void onClick(View v) {
  37. badge3.toggle(true);
  38. }
  39. });
  40. // 用户自定义动画
  41. btnAnim2 = (Button) findViewById(R.id.anim2_target);
  42. badge4 = new BadgeView(this, btnAnim2);
  43. badge4.setText("123");
  44. badge4.setBadgePosition(BadgeView.POSITION_TOP_LEFT);
  45. badge4.setBadgeMargin(15);
  46. badge4.setBadgeBackgroundColor(Color.parseColor("#A4C639"));
  47. btnAnim2.setOnClickListener(new OnClickListener() {
  48. @Override
  49. public void onClick(View v) {
  50. // 设置进入的移动动画,设置了插值器,可以实现颤动的效果
  51. TranslateAnimation anim = new TranslateAnimation(-100, 0, 0, 0);
  52. anim.setInterpolator(new BounceInterpolator());
  53. // 设置动画的持续时间
  54. anim.setDuration(1000);
  55. // 设置退出的移动动画
  56. TranslateAnimation anim2 = new TranslateAnimation(0, -100, 0, 0);
  57. anim2.setDuration(500);
  58. badge4.toggle(anim, anim2);
  59. }
  60. });
  61. // 设置用户自定义的背景图片
  62. btnCustom = (Button) findViewById(R.id.custom_target);
  63. badge5 = new BadgeView(this, btnCustom);
  64. badge5.setText("37");
  65. badge5.setBackgroundResource(R.drawable.badge_ifaux);
  66. badge5.setTextSize(16);
  67. btnCustom.setOnClickListener(new OnClickListener() {
  68. @Override
  69. public void onClick(View v) {
  70. badge5.toggle(true);
  71. }
  72. });
  73. // 在tab上显示一个小红点
  74. TabWidget tabs = (TabWidget) findViewById(android.R.id.tabs);
  75. btnTab = (Button) findViewById(R.id.tab_btn);
  76. badge7 = new BadgeView(this, tabs, 2);
  77. badge7.setText("5");
  78. btnTab.setOnClickListener(new OnClickListener() {
  79. @Override
  80. public void onClick(View v) {
  81. badge7.toggle();
  82. }
  83. });
  84. // 可以被点击的badge
  85. btnClick = (Button) findViewById(R.id.click_target);
  86. badge6 = new BadgeView(this, btnClick);
  87. badge6.setText("click me");
  88. badge6.setBadgeBackgroundColor(Color.BLUE);
  89. badge6.setTextSize(16);
  90. //设置点击事件
  91. badge6.setOnClickListener(new OnClickListener() {
  92. @Override
  93. public void onClick(View v) {
  94. Toast.makeText(DemoActivity.this, "clicked badge",
  95. Toast.LENGTH_SHORT).show();
  96. }
  97. });
  98. btnClick.setOnClickListener(new OnClickListener() {
  99. @Override
  100. public void onClick(View v) {
  101. badge6.toggle();
  102. }
  103. });
  104. // 红点数字可以自增长的badge
  105. btnIncrement = (Button) findViewById(R.id.increment_target);
  106. badge8 = new BadgeView(this, btnIncrement);
  107. badge8.setText("0");
  108. btnIncrement.setOnClickListener(new OnClickListener() {
  109. @Override
  110. public void onClick(View v) {
  111. if (badge8.isShown()) {
  112. badge8.increment(1);
  113. } else {
  114. badge8.show();
  115. }
  116. }
  117. });

上面的代码是用来实现第一张效果图的效果的,下面是第三张效果图的实现

  1. BadgeView badge;
  2. View target;
  3. // *** test linear layout container ***
  4. target = findViewById(R.id.linear_target);
  5. badge = new BadgeView(this, target);
  6. badge.setText("OK");
  7. badge.show();
  8. // *** test relative layout container ***
  9. target = findViewById(R.id.relative_target);
  10. badge = new BadgeView(this, target);
  11. badge.setText("OK");
  12. badge.show();
  13. // *** test frame layout container ***
  14. target = findViewById(R.id.frame_target);
  15. badge = new BadgeView(this, target);
  16. badge.setText("OK");
  17. badge.show();
  18. // *** test table layout container ***
  19. target = findViewById(R.id.table_target);
  20. badge = new BadgeView(this, target);
  21. badge.setText("OK");
  22. badge.show();
  23. // *** test linear layout ***
  24. target = findViewById(R.id.linear_group_target);
  25. badge = new BadgeView(this, target);
  26. badge.setText("OK");
  27. badge.show();
  28. // *** test relative layout ***
  29. target = findViewById(R.id.relative_group_target);
  30. badge = new BadgeView(this, target);
  31. badge.setText("OK");
  32. badge.show();
  33. // *** test frame layout ***
  34. target = findViewById(R.id.frame_group_target);
  35. badge = new BadgeView(this, target);
  36. badge.setText("OK");
  37. badge.show();
  38. // *** test table layout ***
  39. target = findViewById(R.id.tablerow_group_target);
  40. badge = new BadgeView(this, target);
  41. badge.setText("OK");
  42. badge.show();

其实都大同小异,使用方式基本一样。

最后直接给出下载链接吧,自己看最明白~

点击下载

BadgeView的使用介绍的更多相关文章

  1. 【Android界面实现】信息更新小红点显示——自己定义控件BadgeView的使用介绍

    在如今大部分的信息公布类应用,都有这样的一个功能:当后台数据更新,比方有系统消息或者是用户间有互动的时候,通过在控件上显示一个小红点来提示用户有新的信息.一般来说,这样的业务需求,我们能够在布局文件里 ...

  2. BadgeView使用介绍

    前段时间做的一个淘宝客的项目,需要在商品图片上添加价格标签,之前自己使用TextView和Cavas绘制的感觉效果一般,今天偶然在CSDN上发现BadgeView这个开源项目,在git下载下来之后,使 ...

  3. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  4. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  5. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  6. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  7. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  8. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

  9. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

随机推荐

  1. 【现代程序设计】homework-08

    1. 理解C++变量的作用域和生命周期 a) 用少于10行代码演示你对局部变量的生命周期的理解 #include <iostream>int main() { ; ;i<;i++); ...

  2. Codeforces Gym 100203I I - I WIN 网络流最大流

    I - I WINTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.acti ...

  3. Hark的数据结构与算法练习之简单选择排序

    /* * 简单选择排序 */ public class SimpleSort { public static void main(String[] args) { int[] arrayData = ...

  4. Linux常用命令_(备份压缩)

    备份打包:tar 指令名称:tar语法:tar 选项[zcvf] [文件或目录]-z 使用gzip压缩.tar文件-c 产生一个.tar文件-v 观看归档过程-f 指定归档后的文件功能描述:归档文件目 ...

  5. 用SQL语句添加删除修改字段

    1.增加字段     alter table docdsp     add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME DROP COLUMNc ...

  6. Redis String命令

        命令 解释 APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾. 如果 key 不存在, APPEND ...

  7. POJ3321 Apple Tree(DFS序)

    题目,是对一颗树,单点修改.子树查询.典型的dfs序入门题. DFS序可以将一颗树与子树们表示为一个连续的区间,然后用线段树来维护:感觉算是树链剖分的一种吧,和轻重链剖分不同的是这是对子树进行剖分的. ...

  8. POJ2817 WordStack(状压DP)

    题目给几个字符串,可以给它们添加前导空格,然后排列,计算每一个字符串和前一个字符串相同非空格字符相等的个数,求可能的最大个数. 状态DP: d[S][i][j]表示已经用的字符串集合S且排列的最后一个 ...

  9. Android解析XML(PULL方式)

    PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...

  10. html页面元素加载顺序

    一般来说,添加背景图片有三种办法: 直接写在标签的style里面,如: <div style="background-image:url('images/Css.JPG')" ...