Я создал счетчик, в котором я хочу, чтобы приложение выводило значение, на котором останавливается счетчик, однако, если указатель счетчика остановился, скажем, в Италии, при выводе текста вы выбираете Индию, я перепробовал все, что знаю, но ничего по какой-то причине работает, не знаю, чего мне там не хватает!
Ниже приведен мой 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
Проблема со спиннером Android Studio ⇐ Android
Форум для тех, кто программирует под Android
1732881385
Anonymous
Я создал счетчик, в котором я хочу, чтобы приложение выводило значение, на котором останавливается счетчик, однако, если указатель счетчика остановился, скажем, в Италии, при выводе текста вы выбираете Индию, я перепробовал все, что знаю, но ничего по какой-то причине работает, не знаю, чего мне там не хватает!
Ниже приведен мой [b]CustomWheelView[/b], заранее благодарю за ваш любезный отзыв :)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[i], 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
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79237009/android-studio-spinner-issue[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия