簡單的方式實現右上角數字指示器
Screenshot_2017-09-21-10-20-15-604_com.kxjsj.indi.png
實現方式:
重寫View或者viewGroup的onDrawForeground
ViewGroup可能需要setWillNotDraw(false);
畫圓形背景,畫數字ok
本文以Imageview為例子
@Override
public void onDrawForeground(Canvas canvas) {
super.onDrawForeground(canvas);
/**
* 等于0不畫
*/
if (indicate == 0) {
return;
}
if (paint == null) {
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
}
paint.setColor(indicateColor);
int width = getWidth();
/**
* 大于最大值畫一個圓
*/
if(indicate>max){
canvas.drawCircle(width-indicateRadius,indicateRadius,indicateRadius/2,paint);
return;
}
/**
* 右上角
* draw背景
*/
float v = paint.measureText(indicate + "");
rect.set(width - v - indicateRadius * 2, 0, width, indicateRadius * 2);
canvas.drawRoundRect(rect, indicateRadius, indicateRadius, paint);
/**
* 畫數字
*/
paint.setColor(indicateTextColor);
paint.setTextSize(indicatesize);
/**
* 計算基線位置
*/
Paint.FontMetrics fm = paint.getFontMetrics();
float baseLineY = indicateRadius - (fm.ascent - (fm.ascent - fm.descent) / 2);
paint.getTextBounds(indicate+"",0,(indicate+"").length(),bounds);
canvas.drawText(indicate + "",width - bounds.right/2 - (indicateRadius+v/2), baseLineY, paint);
}