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

通过自定义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值使它能完整显示出来


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容