带角标的ImageView

项目中需要一个TabLayout中的Tab带上角标提示,于是利用Tab的CustomView继承自定义View画了一个,比较简单。。

public class MarkedImageView extends ImageView {
    private Paint mCirclePanit;
    private Paint mTextPanit;
    private int mMessageNumber;
    private boolean mIsHideMessageMark = false;

    private Context mContext;
    private int mPaddingPx;
    private float mMarkRadius;
    private int mTextSize;

    public MarkedImageView(Context context) {
        this(context, null);
    }

    public MarkedImageView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MarkedImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.mContext = context;
        mCirclePanit = new Paint(Paint.ANTI_ALIAS_FLAG);
        mCirclePanit.setColor(Color.parseColor("#FF4400"));
        mTextPanit = new Paint(Paint.ANTI_ALIAS_FLAG);
        mTextPanit.setColor(Color.WHITE);
        mTextPanit.setTextAlign(Paint.Align.CENTER);
        mPaddingPx = DensityUtil.dip2px(mContext, 8);
        mMarkRadius = DensityUtil.dip2px(mContext, 8);
        mTextSize = DensityUtil.dip2px(mContext, 10);
        mTextPanit.setTextSize(mTextSize);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (!mIsHideMessageMark) {
            //8 is checkable padding 8dp should turns to px
            if (mMessageNumber > 0 && mMessageNumber < 100) {
                canvas.drawCircle(getMeasuredWidth() - mMarkRadius, mMarkRadius + mPaddingPx, mMarkRadius, mCirclePanit);
                canvas.drawText(mMessageNumber + "", getMeasuredWidth() - mMarkRadius, mMarkRadius + mTextSize / 3 + mPaddingPx, mTextPanit);
            } else if (mMessageNumber > 99) {
                RectF rectF = new RectF(getMeasuredWidth() - 2 * mMarkRadius, mPaddingPx, getMeasuredWidth() + (2/3)*mMarkRadius, 2 * mMarkRadius + mPaddingPx);
                canvas.drawRoundRect(rectF, mMarkRadius, mMarkRadius, mCirclePanit);
                canvas.drawText("99+", getMeasuredWidth() - mMarkRadius, mMarkRadius + mTextSize / 3 + mPaddingPx, mTextPanit);
            }
        }
    }

    public void setMessageNumber(int messageNumber) {
        mMessageNumber = messageNumber;
        invalidate();
    }

    public void setIsHideMessageMark(boolean isHideMessageMark) {
        mIsHideMessageMark = isHideMessageMark;
        invalidate();
    }

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值