以下是一个使用Kotlin编写的自定义圆形数字提示的示例代码,该代码可以兼容1到99+的数字,并保持圆形不变形。\n\n首先,创建一个名为CircleBadgeView的自定义View类:\n\nkotlin\nimport android.content.Context\nimport android.graphics.Canvas\nimport android.graphics.Color\nimport android.graphics.Paint\nimport android.graphics.Rect\nimport android.util.AttributeSet\nimport android.view.View\n\nclass CircleBadgeView(context: Context, attrs: AttributeSet? = null) : View(context, attrs) {\n private val paint = Paint(Paint.ANTI_ALIAS_FLAG)\n private var text = ""\n private val textBounds = Rect()\n\n init {\n paint.color = Color.RED\n paint.style = Paint.Style.FILL\n paint.textSize = resources.getDimensionPixelSize(R.dimen.circle_badge_text_size).toFloat()\n paint.textAlign = Paint.Align.CENTER\n }\n\n fun setCount(count: Int) {\n text = if (count > 99) "99+" else count.toString()\n invalidate()\n }\n\n override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {\n val desiredWidth = MeasureSpec.getSize(widthMeasureSpec)\n val desiredHeight = MeasureSpec.getSize(heightMeasureSpec)\n val textHeight = paint.descent() - paint.ascent()\n val width = Math.max(desiredWidth, suggestedMinimumWidth) + paddingLeft + paddingRight\n val height = Math.max(desiredHeight, suggestedMinimumHeight) + paddingTop + paddingBottom + textHeight.toInt()\n setMeasuredDimension(width, height)\n }\n\n override fun onDraw(canvas: Canvas) {\n super.onDraw(canvas)\n\n val radius = Math.min(width, height) / 2f\n canvas.drawCircle(width / 2f, height / 2f, radius, paint)\n\n paint.color = Color.WHITE\n paint.getTextBounds(text, 0, text.length, textBounds)\n val x = width / 2f\n val y = height / 2f + (textBounds.bottom - textBounds.top) / 2f - textBounds.bottom\n canvas.drawText(text, x, y, paint)\n }\n}\n\n\n在上述代码中,我们定义了一个CircleBadgeView类,该类继承自View,并重写了onMeasureonDraw方法。onMeasure方法用于计算View的宽度和高度,以确保View能够容纳文本和绘制的圆形背景。onDraw方法用于绘制圆形背景和文本。\n\n接下来,在布局文件中使用CircleBadgeView:\n\nxml\n<com.example.CircleBadgeView\n android:id="@+id/badgeView"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:padding="4dp"\n android:textColor="#FFFFFF"\n android:textSize="12sp"\n app:layout_constraintEnd_toEndOf="parent"\n app:layout_constraintTop_toTopOf="parent" />\n\n\n最后,在Activity中设置圆形数字提示的数值:\n\nkotlin\nval badgeView: CircleBadgeView = findViewById(R.id.badgeView)\nbadgeView.setCount(99) // 设置提示数值为99\n\n\n这样,就可以在布局中显示一个带有圆形背景的数字提示,并且可以根据需要设置不同的数值。

Android Kotlin 自定义圆形数字提示 - 兼容 1 到 99+ 不变形

原文地址: https://www.cveoy.top/t/topic/qmBo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录