Viewbadger项目的下载地址https://github.com/jgilfelt/android-viewbadger
首先是使用方法
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