Проблема со спиннером Android StudioAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Проблема со спиннером Android Studio

Сообщение Anonymous »

Я создал счетчик, в котором я хочу, чтобы приложение выводило значение, на котором останавливается счетчик, однако, если указатель счетчика остановился, скажем, в Италии, при выводе текста вы выбираете Индию, я перепробовал все, что знаю, но ничего по какой-то причине работает, не знаю, чего мне там не хватает!
Ниже приведен мой CustomWheelView, заранее благодарю за ваш любезный отзыв :)package com.tummyspinner.app

import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.LinearGradient
import android.graphics.Paint
import android.graphics.RectF
import android.graphics.Shader
import android.graphics.Typeface
import android.util.AttributeSet
import android.view.View
import kotlin.math.min

class CustomWheelView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {

private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
private val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
color = Color.WHITE
textSize = 40f
textAlign = Paint.Align.CENTER
typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD)
}
private val gradientColors = listOf(
Color.parseColor("#F44336"), // Red
Color.parseColor("#FF9800"), // Orange
Color.parseColor("#FFEB3B"), // Yellow
Color.parseColor("#4CAF50"), // Green
Color.parseColor("#2196F3"), // Blue
Color.parseColor("#9C27B0"), // Purple
Color.parseColor("#E91E63") // Pink
)
private var rectF = RectF()
private var angle = 0f
private var isSpinning = false

private val segments = listOf("Italian", "Indian", "Chinese", "Mexican", "American", "Thai", "Japanese")

override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)

val width = width.toFloat()
val height = height.toFloat()
val radius = min(width, height) / 2
rectF.set(width / 2 - radius, height / 2 - radius, width / 2 + radius, height / 2 + radius)

val sweepAngle = 360f / segments.size

for (i in segments.indices) {
paint.shader = LinearGradient(
rectF.centerX(), rectF.top,
rectF.centerX(), rectF.bottom,
gradientColors[i % gradientColors.size],
gradientColors[(i + 1) % gradientColors.size],
Shader.TileMode.CLAMP
)
canvas.drawArc(rectF, angle + i * sweepAngle, sweepAngle, true, paint)

val textAngle = Math.toRadians((angle + i * sweepAngle + sweepAngle / 2).toDouble())
val x = (width / 2 + radius * 0.65 * Math.cos(textAngle)).toFloat()
val y = (height / 2 + radius * 0.65 * Math.sin(textAngle)).toFloat()
canvas.drawText(segments, x, y, textPaint)
}
}

private var isListenerFired = false // Prevent multiple messages

fun spinWheel() {
if (!isSpinning) {
isSpinning = true
isListenerFired = false // Reset the flag at the start of the spin
val randomAngle = (360 * 5 + (0..360).random()).toFloat() // Random spin angle

animate()
.rotation(randomAngle)
.setDuration(3000)
.withEndAction {
// Bounce effect
animate().rotationBy(5f).setDuration(100).withEndAction {
animate().rotationBy(-5f).setDuration(100).withEndAction {
// Final calculations
angle = (angle + randomAngle) % 360 // Update current angle
isSpinning = false
invalidate()

val sweepAngle = 360f / segments.size
val correctedAngle = (360 - (angle % 360) + sweepAngle / 2) % 360
val selectedIndex = ((correctedAngle / sweepAngle).toInt() % segments.size)

// Ensure listener is invoked once
onWheelStoppedListener?.invoke(segments[selectedIndex])
}.start()
}.start()
}
.start()
}
}

private var onWheelStoppedListener: ((String) -> Unit)? = null

fun setOnWheelStoppedListener(listener: (String) -> Unit) {
onWheelStoppedListener = listener
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... nner-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»