2025-04-01 07:52:15 -04:00
|
|
|
package com.pixelmintdrop.ui
|
2025-03-27 22:24:48 -04:00
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.graphics.Canvas
|
|
|
|
import android.graphics.Color
|
|
|
|
import android.graphics.Paint
|
|
|
|
import android.util.AttributeSet
|
|
|
|
import android.view.View
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Custom view for displaying the player's level in a fancy badge style
|
|
|
|
*/
|
|
|
|
class LevelBadge @JvmOverloads constructor(
|
|
|
|
context: Context,
|
|
|
|
attrs: AttributeSet? = null,
|
|
|
|
defStyleAttr: Int = 0
|
|
|
|
) : View(context, attrs, defStyleAttr) {
|
|
|
|
|
|
|
|
private val badgePaint = Paint().apply {
|
|
|
|
color = Color.WHITE
|
|
|
|
isAntiAlias = true
|
|
|
|
}
|
|
|
|
|
|
|
|
private val textPaint = Paint().apply {
|
|
|
|
color = Color.BLACK
|
|
|
|
isAntiAlias = true
|
|
|
|
textAlign = Paint.Align.CENTER
|
|
|
|
textSize = 48f
|
|
|
|
isFakeBoldText = true
|
|
|
|
}
|
|
|
|
|
|
|
|
private var level = 1
|
|
|
|
private var themeColor = Color.WHITE
|
|
|
|
|
|
|
|
fun setLevel(newLevel: Int) {
|
|
|
|
level = newLevel
|
|
|
|
invalidate()
|
|
|
|
}
|
|
|
|
|
|
|
|
fun setThemeColor(color: Int) {
|
|
|
|
themeColor = color
|
|
|
|
badgePaint.color = color
|
|
|
|
invalidate()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
|
|
|
|
super.onSizeChanged(w, h, oldw, oldh)
|
|
|
|
// Adjust text size based on view size
|
|
|
|
textPaint.textSize = h * 0.6f
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onDraw(canvas: Canvas) {
|
|
|
|
super.onDraw(canvas)
|
|
|
|
|
|
|
|
// Draw badge circle
|
|
|
|
val radius = (width.coerceAtMost(height) / 2f) * 0.9f
|
|
|
|
canvas.drawCircle(width / 2f, height / 2f, radius, badgePaint)
|
|
|
|
|
|
|
|
// Draw level text
|
|
|
|
canvas.drawText(
|
|
|
|
level.toString(),
|
|
|
|
width / 2f,
|
|
|
|
height / 2f + (textPaint.textSize / 3),
|
|
|
|
textPaint
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|