美文网首页Android开发
MsgTextView(文字图标右上角数字气泡提示)

MsgTextView(文字图标右上角数字气泡提示)

作者: niiiiiK | 来源:发表于2017-07-09 14:29 被阅读0次

通过自定义TextView非常简单的实现右上角数字气泡提示

package com.xuan.forens.actionhttp;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.drawable.Drawable;

import android.support.annotation.Nullable;

import android.util.AttributeSet;

import android.widget.TextView;

/**

* Created by forens.xuan on 2017/7/9 13:48

* e-mail: 1129305620@qq.com

* des:

*/

public class MsgTextView extends TextView {

private Paint mPaint,textPaint;

private int msgCount;

//原点偏移量,半径

private float x,y,f=10,r=30;

//是否已经初始化过

private boolean init=false;

public MsgTextView(Context context) {

super(context);

initMsgTextView();

}

public MsgTextView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

initMsgTextView();

}

public MsgTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initMsgTextView();

}

private void initMsgTextView(){

setPadding(0, (int) (r-f),0,0);

initPaint();

}

public void setMsg(int count){

msgCount=count;

postInvalidate();

}

private void initPaint(){

if (mPaint == null) {

mPaint = new Paint();

mPaint.setAntiAlias(true);

mPaint.setColor(Color.parseColor("#FE0264"));

textPaint=new Paint();

textPaint.setColor(Color.parseColor("#FFFFFF"));

textPaint.setTextAlign(Paint.Align.CENTER);

textPaint.setTextSize(r);

textPaint.setAntiAlias(true);

}

}

private void drawValue(Canvas canvas){

if(msgCount>0) {

canvas.drawCircle(x, y, r, mPaint);

Paint.FontMetricsInt fontMetrics = textPaint.getFontMetricsInt();

int baseline = (int) (((r * 2) - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top);

canvas.drawText(String.valueOf(msgCount), x, baseline, textPaint);

}

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

if(!init){

Drawable[] n = getCompoundDrawables();

Drawable top = n[1];

if (top != null) {

int w = top.getBounds().width();

x=(getWidth() / 2 + w / 2) - 10;

y=getPaddingTop()+10;

init=true;

}

}

drawValue(canvas);

}

}

截图看到,下面那个气泡显示不全,这里要注意的是使用时要根据实际情况调整Padding值使它能完整显示出来

相关文章

网友评论

    本文标题:MsgTextView(文字图标右上角数字气泡提示)

    本文链接:https://www.haomeiwen.com/subject/pwsuattx.html