版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/codekxx/article/details/84846496
最近有一个需求就是需要把购物车的图标右上角加一个数字
自定义ImageView如下:
public class NumImageView extends ImageView {
//要显示的数量数量
private int num = 0;
//红色圆圈的半径
private float radius;
//圆圈内数字的半径
private float textSize;
//右边和上边内边距
private int paddingRight;
private int paddingTop;
public NumImageView(Context context) {
super(context);
}
public NumImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NumImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//设置显示的数量
public void setNum(int num) {
this.num = num;
//重新绘制画布
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (num > 0) {
//初始化半径
radius = getWidth() / 5;
//初始化字体大小
textSize = num < 10 ? radius + 5 : radius;
//初始化边距
paddingRight = getPaddingRight();
paddingTop = getPaddingTop();
//初始化画笔
Paint paint = new Paint();
//设置抗锯齿
paint.setAntiAlias(true);
//设置颜色为红色
paint.setColor(getResources().getColor(R.color.zhuti));
//设置填充样式为充满
paint.setStyle(Paint.Style.FILL);
//画圆
canvas.drawCircle(getWidth() - radius - paddingRight/2, radius + paddingTop/2, radius, paint);
//设置颜色为白色
paint.setColor(0xffffffff);
//设置字体大小
paint.setTextSize(textSize);
//画数字
canvas.drawText("" + (num < 99 ? num : 99),
num < 10 ? getWidth() - radius - textSize / 4 - paddingRight/2
: getWidth() - radius - textSize / 2 - paddingRight/2,
radius + textSize / 3 + paddingTop/2, paint);
}
}
}
在布局中使用
<com.jkgl.view.NumImageView
android:id="@+id/actionbar_btn"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/text_layout_10_dp"
android:layout_marginRight="14dp"
android:scaleType="centerInside"
android:src="@drawable/icon"/>
代码中使用:
actionbar_btn = (NumImageView) view.findViewById(R.id.actionbar_btn);
actionbar_btn.setNum(10);
效果如下: