RadioButton小红点、数字角标的实现

 

RadioButton通常作为RadioGroup的子布局嵌套在里面,单独使用不太常用,本文实现RadioButton小红点、数字角标,主要是利用onDraw方法进行重写,绘制小红点、数字角标。如下:

   

工具类:

public class UIUtils {
    public static int dp2px(float dpValue) {
        final float scale = getContext().getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
}

实现代码:

public class AppRadioButton extends AppCompatRadioButton {

    private Paint mPaint;
    private boolean isShowDot;
    private boolean isShowNumberDot;

    //小红点半径
    private final int circleDotRadius = UIUtils.dp2px(4);
    //icon的尺寸,高 == 宽
    private final int drawableSize = UIUtils.dp2px(22);
    //小红点距离icon的padding
    private final int drawablePadding = UIUtils.dp2px(2);
    //矩形角标数字左右padding
    private final int rectFPaddingX = UIUtils.dp2px(4);
    //矩形角标数字上下padding
    private final int rectFPaddingY = UIUtils.dp2px(3);
    //角标矩形背景
    private int rectFRadius = UIUtils.dp2px(8);
    //圆点和角标颜色
    private final int PAINT_COLOR_DEFAULT = Color.parseColor("#FD481E");

    private String numberText;

    /**
     * 圆点和未读消息的坐标
     */
    private float pivotX;
    private float pivotY;

    public AppRadioButton(Context context) {
        super(context);
        init();
    }

    public AppRadioButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public AppRadioButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mPaint = new Paint();
        mPaint.setStrokeWidth(2);
        mPaint.setAntiAlias(true);
        mPaint.setColor(PAINT_COLOR_DEFAULT);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(getScrollX(), 0);
        pivotX = getWidth() / 2 + drawableSize / 2 + drawablePadding;
        pivotY = getHeight() / 2 - drawableSize / 2 - drawablePadding;
        if (isShowDot) {
            canvas.drawCircle(pivotX, pivotY, circleDotRadius, mPaint);
        } else if (isShowNumberDot && !TextUtils.isEmpty(numberText)) {
            if (Integer.parseInt(numberText) > 99) {
                numberText = "99+";
            }
            if (numberText.length() == 1) {
                rectFRadius = UIUtils.dp2px(6);
            }
            mPaint.setColor(PAINT_COLOR_DEFAULT);
            mPaint.setTextSize(UIUtils.dp2px(12));
            float textWidth = mPaint.measureText(numberText);
            Paint.FontMetrics fontMetrics = mPaint.getFontMetrics();
            float textHeight = Math.abs((fontMetrics.top + fontMetrics.bottom));
            RectF rect = new RectF(pivotX - UIUtils.dp2px(4), pivotY - textHeight / 2 - rectFPaddingY, pivotX + textWidth + rectFPaddingX * 2, pivotY + textHeight / 2 + rectFPaddingY);
            canvas.drawRoundRect(rect, rectFRadius, rectFRadius, mPaint);
            mPaint.setColor(Color.parseColor("#ffffff"));
            float baseline = (rect.bottom + rect.top - fontMetrics.bottom - fontMetrics.top) / 2 - UIUtils.dp2px(1);
            mPaint.setTextAlign(Paint.Align.CENTER);
            //绘制文本
            canvas.drawText(numberText, pivotX + textWidth / 2 + rectFPaddingX - UIUtils.dp2px(4) / 2, baseline, mPaint);
        }
    }

    /**
     * `
     * 设置是否显示小圆点
     */
    public void setShowSmallDot(boolean isShowDot) {
        this.isShowDot = isShowDot;
        invalidate();
    }

    /**
     * 设置是否显示数字
     */
    public void setNumberDot(boolean isShowNumberDot, @NonNull String text) {
        this.isShowNumberDot = isShowNumberDot;
        this.numberText = text;
        if (isShowNumberDot) {
            isShowDot = false;
        }
        invalidate();
    }
}

实现原理如上标注,效果很不错,如果有特殊需求,上下左右显示不同的样式显示也可以在onDraw上面修改。

 

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要手动改变 RadioButton 的大小,可以采取以下步骤: 1. 在 Visual Studio 中打开 Winform 窗体的设计器。 2. 选中要修改大小的 RadioButton 控件。 3. 在属性窗口中找到 Size 属性,手动修改 RadioButton 的宽度和高度,或者通过鼠标拖拽控制点来改变大小。 4. 如果需要保持RadioButton 的比例不变,可以设置 AutoSize 属性为 False。 需要注意的是,手动修改 RadioButton 大小可能会影响布局,因此需要根据实际情况进行调整。 ### 回答2: 要手动改变 Winform 中 RadioButton 的大小,可以使用以下步骤: 1. 打开你想要修改 RadioButton 大小的窗体的设计视图。 2. 找到你想要修改大小的 RadioButton 控件,选中它。 3. 在属性窗口中,找到 Size 属性。默认情况下,Size 属性的值是自动生成的,选择它可以生成一个 SizeChanged 事件处理程序。 4. 在生成的事件处理程序中,可以使用以下代码进行手动调整 RadioButton 的大小: ```csharp private void radioButton1_SizeChanged(object sender, EventArgs e) { // 将 RadioButton 控件的大小设置为你所需要的尺寸 radioButton1.Width = 100; // 设置宽度为100像素 radioButton1.Height = 50; // 设置高度为50像素 } ``` 这段代码将控制 RadioButton 的宽度和高度,你可以根据自己的需要修改这些数值。确保在设计视图中相应的 RadioButton 控件的 Size 属性已经设置为上述事件处理程序。 5. 运行你的应用程序,你会看到 RadioButton 的大小已经根据你的设置进行调整了。 请注意,如果你保存并重新加载你的窗体的设计视图,你需要手动将 RadioButton 控件的 Size 属性设置为刚刚生成的事件处理程序。这样才能确保在每次重新打开窗体时保留你的自定义大小设置。 希望这个回答能够帮助你手动改变 Winform 中 RadioButton 的大小。 ### 回答3: 在WinForm中,可以通过编程的方式手动改变RadioButton的大小。以下是一种示例方法: 首先,在设计视图或代码视图中选中要调整大小的RadioButton控件。然后,在属性窗口中找到"Size"(大小)属性。 更改RadioButton的大小可以通过两种方法实现: 方法一:直接在属性窗口修改Size属性的值。可以手动键入想要的宽度和高度,或者使用Size控件调整控件的大小。 方法二:在代码中使用C#语言编写控件大小更改的代码。找到RadioButton的名称,并根据需要调整宽度和高度。例如,假设RadioButton的名称为"radioButton1",我们可以使用以下代码更改其大小为150x30像素: ```csharp radioButton1.Size = new Size(150, 30); ``` 以上为修改RadioButton大小的常见方法,你可以根据自己的需求选择其中一种方法来实现。记得在修改后重新编译和运行程序,以查看更改后的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值