您好,登錄后才能下訂單哦!
前言
在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還要自己去畫數字,這樣就增加了難度,不值得了。
源碼下載點擊這里。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。