Viewbadger消息提醒的实现
2016-03-02 10:45
204 查看
Viewbadger项目的下载地址https://github.com/jgilfelt/android-viewbadger
首先是使用方法
new一个 BadgeView对象,参数的第一个为context对象,第二个参数是要挂钩的view对象(就是要显示消息提示的那个view),创建了BadgeView对象之后,就可以像设置textview一样去设置BadgeView的属性,最后要记得调用show方法显示这个BadgeView。使用的方法非常的简单
上面是一些属性设置的使用方法,接下来解析一下BadgeView的实现原理:
BadgeView继承自textview,只不过在他的parentview和自己之间再加了一层framelayout,从BadgeView的显示效果上来看,我们也基本尚能看出他的结构:framelayout上一个要显示消息提示的view,一个BadgeView显示提示的消息。具体实现:在BadgeView的构造方法中new BadgeView(this,targetview),targetview是和BadgeView绑定的view,首先主要做的事情就是得到targetview的parentview,从这个parentview中移除targetview,并添加一个framelayout取而代之,之后在这个framelayout中添加被移除的targetview以及BadgeView自身:
这里还有一种情况是targetview是Tabwidget的时候,不过google已经不建议使用tablayout了,所以基本上可以不用考虑(其实也一样都是加一个framelayout,不同之处是在Tabwidget上直接加)。
随后在显示的时候设置一些BadgeView在framelayout中的显示属性(背景,字体颜色等)。。。。这样就完成了BadgeView,比较的简单,源码中也就一个类。
补上加了注释的源码:http://download.csdn.net/detail/u012806692/9453562
首先是使用方法
BadgeView badgeView = new BadgeView(this, iv1);
new一个 BadgeView对象,参数的第一个为context对象,第二个参数是要挂钩的view对象(就是要显示消息提示的那个view),创建了BadgeView对象之后,就可以像设置textview一样去设置BadgeView的属性,最后要记得调用show方法显示这个BadgeView。使用的方法非常的简单
//设置消息内容 badge.setText("1"); //设置消息内容的字体大小 badgeView.setTextSize(8.5f); badgeView2.setBackgroundResource(R.drawable.noread); //设置消息内容的字体颜色 badgeView.setTextColor(Color.DKGRAY); badge.show(); //隐藏badgeView
</pre><pre>
badgeView.sethide(); badgeView.setVisibility(View.GONE);
上面是一些属性设置的使用方法,接下来解析一下BadgeView的实现原理:
BadgeView继承自textview,只不过在他的parentview和自己之间再加了一层framelayout,从BadgeView的显示效果上来看,我们也基本尚能看出他的结构:framelayout上一个要显示消息提示的view,一个BadgeView显示提示的消息。具体实现:在BadgeView的构造方法中new BadgeView(this,targetview),targetview是和BadgeView绑定的view,首先主要做的事情就是得到targetview的parentview,从这个parentview中移除targetview,并添加一个framelayout取而代之,之后在这个framelayout中添加被移除的targetview以及BadgeView自身:
private void applyTo(View target) { LayoutParams lp = target.getLayoutParams(); ViewParent parent = target.getParent(); FrameLayout container = new FrameLayout(context); if (target instanceof TabWidget) { // set target to the relevant tab child container target = ((TabWidget) target).getChildTabViewAt(targetTabIndex); this.target = target; ((ViewGroup) target).addView(container, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); this.setVisibility(View.GONE); container.addView(this); } else { // TODO verify that parent is indeed a ViewGroup ViewGroup group = (ViewGroup) parent; int index = group.indexOfChild(target); group.removeView(target); group.addView(container, index, lp); container.addView(target); this.setVisibility(View.GONE); container.addView(this); group.invalidate(); } }
这里还有一种情况是targetview是Tabwidget的时候,不过google已经不建议使用tablayout了,所以基本上可以不用考虑(其实也一样都是加一个framelayout,不同之处是在Tabwidget上直接加)。
随后在显示的时候设置一些BadgeView在framelayout中的显示属性(背景,字体颜色等)。。。。这样就完成了BadgeView,比较的简单,源码中也就一个类。
补上加了注释的源码:http://download.csdn.net/detail/u012806692/9453562
相关文章推荐
- 在CentOS6.5上安装Tomcat7
- 正则表达式5-分组突击
- 正则表达式4-多行的诗歌
- 如何快速修改iMindMap Android中关联线格式
- 类的static成员变量和成员函数
- 基于JavaScript实现表单密码的隐藏和显示出来
- Skype for Business Server 2015完整部署(边缘/反向代理/移动端)
- 基于Maven 构建rpm包
- 性能优化,进无止境---CPU篇
- shell 包含其他shell脚本的方法
- Github no password log in
- 内存管理以及Autorelease和自动释放池
- 梯度下降与矩阵分解实例解析
- json序列化及反序列化
- 自适应rem布局
- 正则表达式3-兄弟的回复
- linux下彻底卸载mysql 图解教程
- Redis+Sentinel安装与配置
- 如何让ClickOnce进行手动更新(含代码)
- LVS三种负载均衡方式比较