您的位置:首页 > 其它

Viewbadger消息提醒的实现

2016-03-02 10:45 204 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: