前言
在qq中有消息个数提醒的控件,虽然现在没用到,但是以后可能会用到,所以就实现它,也不难。
实现
效果图如下:
先贴源码了:
public class tipnumberview extends textview { private paint mbgpaint ; paintflagsdrawfilter pfd; public tipnumberview(context context, attributeset attrs) { super(context, attrs); //初始化画笔 mbgpaint = new paint(); mbgpaint.setcolor(color.red); mbgpaint.setantialias(true); pfd = new paintflagsdrawfilter(0, paint.anti_alias_flag|paint.filter_bitmap_flag); } public tipnumberview(context context) { this(context,null); } @override protected void onmeasure(int widthmeasurespec, int heightmeasurespec) { super.onmeasure(widthmeasurespec, heightmeasurespec); //得到测量的高度和宽度 int measuredwidth = getmeasuredwidth(); int measuredheight = getmeasuredheight(); int max = math.max(measuredwidth, measuredheight); //设置控件区域大小 setmeasureddimension(max, max); } //设置背景颜色 @override public void setbackgroundcolor(int color){ mbgpaint.setcolor(color); } /** * 设置通知个数显示 * @param text */ public void setnotifitext(int text){ settext(text+""); } public void setnotifitext(string text){ settext(text); } //绘图 @override public void draw(canvas canvas) { //设置绘图无锯齿 canvas.setdrawfilter(pfd); canvas.drawcircle(getwidth()/2, getheight()/2, math.max(getwidth()/2, getheight())/2, mbgpaint); super.draw(canvas); } }
我是直接继承至textview,因为textview有settext方法,所以只需要绘制圆形的红色背景,然后调用方法settext即可,这就是实现的思路。
先要覆盖onmeasure方法来得到宽度和高度,因为背景为圆形,所以我们取宽度和高度两者之间的最大值,然后设置控件大小为一个正方形,在这个正方形的矩形里面,调用drawcircle方法来绘制圆形,设置画笔的颜色为红色即可。
小结
在布局文件使用这个类的时候,要设置android:gravity为center,这样数字就可以居中了,之所以没有继承view来进行写,因为view还要自己去画数字,这样就增加了难度,不值得了。
源码下载点击。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
荐 面试官:kafka日志段如何读写都不知道,好意思说精通Kafka吗?
荐 如何写出一份“有理有据使人信服”的Android项目设计文档
荐 灵魂一问,Android中有代替HashMap的方法吗?
intent.setFlag的参数 FLAG_ACTIVITY_CLEAR_TASK 说明
网友评论