Spanish Hacer una especie de Ruleta

Jannete

Member
Saludos a todos, quiero hacer una especie de Ruleta, o dicho de otra manera, una vista circular dividida en 8 secciones, cada una de un color y que haya una pelota / flecha que apunte al finalizar la rotacion a algun color, vi este codigo para rotar una vista desde el centro:

B4X:
Sub setPivotCenter(v As View)
    Dim j As JavaObject = v
    Dim X As Float = v.Width / 2
    Dim y As Float = v.Height / 2
    j.RunMethod("setPivotX", Array As Object(X))
    j.RunMethod("setPivotY", Array As Object(Y))
End Sub

Con eso soluciono el giro de la ruleta, pero ahora van 2 partes que no he logrado solucionar:

1.- Hacer que gire (me explico, el tiempo de giro, puedo poner un timer y que gire durante un periodo determinado, pero el problema es ir bajando la aceleracion del giro).

2.- Hacer que identifique en que parte del circulo (view) se detuvo la flecha / pelota.

Tal vez me estoy ahogando en un vaso con agua, pero no se me ha ocurrido nada, cualquier ayuda la agradecere mucho.

Saludos!!
 

Jannete

Member
Creo que me deje llevar y postee una funcion sin antes probarla, mi resultado fue negativo al probar, pero... encontre esto:

B4X:
Sub Process_Globals
    Dim RotateTimer As Timer

    Dim Rotation = 0 As Int

    Dim RotateDuration As Int
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private Button1 As Button
    'Private ImageView1 As ImageView
    
    Dim CirclePanel As Panel

    Dim CircleCanvas As Canvas
    Dim CircleRect As Rect

    Dim CircleBitmap As Bitmap
    CircleBitmap.Initialize(File.DirAssets, "icono.png")
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("1")

    RotateTimer.Initialize("RotateTimer",15)

    CircleCanvas.Initialize(CirclePanel)
    CircleRect.Initialize(0,0,40%x,40%x)

    CircleCanvas.DrawBitmap(CircleBitmap,Null,CircleRect)
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Button1_Click
    RotateDuration = 100
    RotateTimer.Enabled = True
End Sub

Sub rotatetimer_tick
    RotateDuration = RotateDuration - 1
    Rotation = Rotation + 10
    
    If Rotation = 360 Then Rotation = 0

    CircleCanvas.DrawBitmapRotated(CircleBitmap,Null,CircleRect,Rotation)

    CirclePanel.Invalidate
    
    If RotateDuration <= 0 Then RotateTimer.Enabled = False
    
End Sub

Esto me da el resultado deseado, es decir, si pongo un png circular (una imagen con transparencia haciendo un circulo), gira la imagen como ruleta, si uso una imagen cuadrada, deja manchones en la pantalla como si fuesen los bordes.

No quiero algo muy elaborado, ya que es algo para fines didacticos con los niños en una escuela, en lugar de pelota puedo poner un cursor sobre puesto y listo, solo me falta una parte; ¿De que manera podria detectar en que seccion de mi ruleta de 8 colores se detiene el giro?.

Muchas gracias.
 

josejad

Expert
Licensed User
Longtime User
Hola Jannete:

Para ser una aficionada como has dicho alguna vez, siempre te metes en cosas complicadas, jeje. No me he parado a ver tu código, sólo he recordado ahora que hay una librería ya hecha y que podría quitarte de líos


saludos,
 

Jannete

Member
Hola Jannete:

Para ser una aficionada como has dicho alguna vez, siempre te metes en cosas complicadas, jeje. No me he parado a ver tu código, sólo he recordado ahora que hay una librería ya hecha y que podría quitarte de líos


saludos,

Mil gracias, creo que esto evita las complicaciones en las que me ando metiendo. En cuanto a lo de meterme en cosas complicadas, ¿se llamara eso ocio?, jajaja. Ya en serio, de repente se me ocurren cosas y me pongo a buscar como solucionarlas, ya cuando de plano no puedo pregunto (lo agarro como algo personal el terminar las cosas). Ahora en la cuarentena me la pase haciendo un apk con mas de 90 modulos, alli meti cosas de libreria y media, incluso hice mi propia calculadora (¿?, habiendo tantas y funcionando la del telefono por defecto...), una calculadora de porcentajes y una calculadora flotante (use un android 4.4, asi que pude usar tooleap).

Aunque no me dedico a la programacion me distrae mucho, y aunque me gusta en especial hacer proyectos para los niños de la escuela donde trabajo, la programacion es mi pasatiempo, tanto asi que en cuarentena aparte de hacer mi aplicacion mounstruo (que por cierto, tardaba 12 minutos en compilar), hice un proyecto casero gigante (y complicado):

Puse un android como hotspot, que a su vez compartia la red de wifi de la que se alimentaba (mediante vpn, no programado por mi), a ese telefono me podia comunicar por sms o bluethoot, ese telefono hacia de servidor, pero tambien podia prender su flash como lampara de emergencia y usarlo para enviar fotos por correo (especie camara de seguridad), a su vez a este servidor conecte una placa de Arduino con un esp y 4 relees para prender 4 focos de la casa, esto podia ser mediante sms o bluethoot (desde mi celular enviando el comando al servidor y este a su vez enviando el comando al arduino), por ultimo use un telefono viejito conectado a un mini bafle y mediante mqtt enviaba los comandos para reproducir/pausar/cambiar las canciones o bajar volumen (de nuevo, ya fuese mediante sms o mediante bt). Ya no segui a mas por falta de presupuesto, y aparte me tuve que cambiar de casa, asi que tuve que desarmar mi circuito.

Volviendo al tema, de nuevo muchas gracias por la ayuda, echare un ojo a la libreria y vuelvo para comentar mi resultado.

Saludos!!
 

josejad

Expert
Licensed User
Longtime User
Puse un android como hotspot, que a su vez compartia la red de wifi de la que se alimentaba (mediante vpn, no programado por mi), a ese telefono me podia comunicar por sms o bluethoot, ese telefono hacia de servidor, pero tambien podia prender su flash como lampara de emergencia y usarlo para enviar fotos por correo (especie camara de seguridad), a su vez a este servidor conecte una placa de Arduino con un esp y 4 relees para prender 4 focos de la casa, esto podia ser mediante sms o bluethoot (desde mi celular enviando el comando al servidor y este a su vez enviando el comando al arduino), por ultimo use un telefono viejito conectado a un mini bafle y mediante mqtt enviaba los comandos para reproducir/pausar/cambiar las canciones o bajar volumen (de nuevo, ya fuese mediante sms o mediante bt). Ya no segui a mas por falta de presupuesto, y aparte me tuve que cambiar de casa, asi que tuve que desarmar mi circuito.

Comparte ese proyecto en "Share my creations"¡¡¡¡¡¡
 

TILogistic

Expert
Licensed User
Longtime User
Mil gracias, creo que esto evita las complicaciones en las que me ando metiendo. En cuanto a lo de meterme en cosas complicadas, ¿se llamara eso ocio?, jajaja. Ya en serio, de repente se me ocurren cosas y me pongo a buscar como solucionarlas, ya cuando de plano no puedo pregunto (lo agarro como algo personal el terminar las cosas). Ahora en la cuarentena me la pase haciendo un apk con mas de 90 modulos, alli meti cosas de libreria y media, incluso hice mi propia calculadora (¿?, habiendo tantas y funcionando la del telefono por defecto...), una calculadora de porcentajes y una calculadora flotante (use un android 4.4, asi que pude usar tooleap).

Aunque no me dedico a la programacion me distrae mucho, y aunque me gusta en especial hacer proyectos para los niños de la escuela donde trabajo, la programacion es mi pasatiempo, tanto asi que en cuarentena aparte de hacer mi aplicacion mounstruo (que por cierto, tardaba 12 minutos en compilar), hice un proyecto casero gigante (y complicado):

Puse un android como hotspot, que a su vez compartia la red de wifi de la que se alimentaba (mediante vpn, no programado por mi), a ese telefono me podia comunicar por sms o bluethoot, ese telefono hacia de servidor, pero tambien podia prender su flash como lampara de emergencia y usarlo para enviar fotos por correo (especie camara de seguridad), a su vez a este servidor conecte una placa de Arduino con un esp y 4 relees para prender 4 focos de la casa, esto podia ser mediante sms o bluethoot (desde mi celular enviando el comando al servidor y este a su vez enviando el comando al arduino), por ultimo use un telefono viejito conectado a un mini bafle y mediante mqtt enviaba los comandos para reproducir/pausar/cambiar las canciones o bajar volumen (de nuevo, ya fuese mediante sms o mediante bt). Ya no segui a mas por falta de presupuesto, y aparte me tuve que cambiar de casa, asi que tuve que desarmar mi circuito.

Volviendo al tema, de nuevo muchas gracias por la ayuda, echare un ojo a la libreria y vuelvo para comentar mi resultado.

Saludos!!

Hooooooo!!

Proyecto IoT, Excelente!!!

Saludos.
 
Top