Technical Support
🟢 Online now
Hello 👋

How can we help you today?
Contact on WhatsApp
B4X Store
jdashboardUI / Notificaciones, diálogos y ayuda / JTastyToast
Notificaciones, diálogos y ayuda

JTastyToast

47 notificaciones animadas HD con Canvas, duración global, degradados, alpha, colores y fuentes personalizadas

Buscar en toda jdashboardUI
Fuente
jdashboardUI.b4xlib · Solo API pública
Idioma de la tienda: es
Referencia animada — JTastyToast
La primera referencia está animada y reproduce el patrón real del componente: entrada desde abajo, un solo toast activo e icono en movimiento. Es una maqueta de documentación; los iconos reales son dibujados por Canvas en B4J.
ANIMATED
Referencia animada de JTastyToast mostrando Success, Download, Warning y Error
El SVG anima la entrada/salida y algunos iconos para explicar el comportamiento. El componente real dispone de 47 animaciones y redibuja Canvas aproximadamente cada 20 ms.
Catálogo de las 47 animaciones públicas de JTastyToast
Mapa visual por familias: success, warning, sistema, celebración, emoción, avisos y utilidades.

Visión general

JTastyToast es el sistema de notificaciones animadas de jdashboardUI para B4J.

No utiliza el Toast nativo de Android ni depende de GIFs para sus iconos. La implementación actual crea cada notificación sobre un B4XView, dibuja el icono en tiempo real con Canvas + JavaObject y anima tanto el icono como la entrada y salida del toast.

La fuente actual incluye 47 tipos de toast animados.

Dim Tasty As JTastyToast
Tasty.Initialize(MainForm.RootPane)

Tasty.Success("Task completed successfully!")

El toast aparece centrado horizontalmente cerca de la parte inferior del Parent, entra mediante una animación vertical y se cierra automáticamente al terminar la duración configurada.


Historia y evolución en B4X

El nombre Tasty Toast ya aparecía en el foro B4X en 2016 como una librería B4A que envolvía un proyecto Android externo. Aquella implementación dependía del Toast de Android y su duración estaba limitada principalmente a short / long.

Referencia histórica:

https://www.b4x.com/android/forum/threads/tasty-toast.69671/

JTastyToast de jdashboardUI es distinto: es una implementación nativa para B4J / JavaFX.

En febrero de 2026 se presentó públicamente JTastyToast HD dentro de jdashboardUI v23 con 17 animaciones, dibujo mediante Canvas / JavaObject, reemplazo de notificaciones para evitar solapamientos y tres duraciones globales.

Anuncio:

https://www.b4x.com/android/forum/threads/%F0%9F%93%A2-huge-announcement-jdashboard-ui-library-v23-%F0%9F%9A%80%E2%9C%A8.170354/

La fuente actual ha crecido mucho más: 47 métodos de notificación animada, además de degradados, alpha, color de fondo, color de texto, fuente personalizada y CornerRadius.


Firma real:

Initialize(Parent As B4XView)

Ejemplo recomendado:

Private Tasty As JTastyToast

Tasty.Initialize(MainForm.RootPane)

También puede inicializarse sobre cualquier B4XView:

Tasty.Initialize(MyPanel)

El tamaño y la posición se calculan a partir del Parent, por lo que conviene usar un contenedor que ya tenga Width y Height válidos.


Flujo real del toast

método público
    ↓
InternalShow
    ↓
elimina el toast anterior si existe
    ↓
calcula color, ancho y alto
    ↓
crea Panel + Canvas + Label
    ↓
lo coloca por debajo del Parent
    ↓
SetLayoutAnimated(600 ms)
    ↓
redibuja el icono aproximadamente cada 20 ms
    ↓
espera la duración
    ↓
HideToast
    ↓
SetLayoutAnimated(600 ms) hacia abajo
    ↓
RemoveViewFromParent

JTastyToast combina dos capas de animación:

  1. movimiento del toast completo;
  2. animación interna del icono dibujado sobre Canvas.

Posición y dimensiones

El toast termina:

  • centrado horizontalmente;
  • aproximadamente 40dip por encima del borde inferior del Parent.

Entrada:

600 ms

Salida:

600 ms

Altura normal:

50dip

Con texto largo:

75dip

El ancho del texto tiene un límite interno aproximado de 400dip y el ancho total se calcula como:

ancho visible del texto + 115dip

Cuando el texto supera el máximo, el Label activa wrap.


Dibujo HD en tiempo real

El icono utiliza un Canvas de aproximadamente:

45dip × 45dip

La implementación redibuja el GraphicsContext JavaFX aproximadamente cada:

20 ms

Esto permite pulsos, escalado, rotación, partículas, rebotes y otras animaciones sin GIFs externos.


Duración global

Constante Valor Uso recomendado
LENGTH_SHORT 2500 ms confirmaciones rápidas
LENGTH_NORMAL 4500 ms información y warnings
LENGTH_LONG 7000 ms errores o mensajes largos

Por defecto se utiliza LENGTH_NORMAL.

Tasty.setDuration(Tasty.LENGTH_SHORT)
Tasty.Success("Saved!")
Tasty.setDuration(Tasty.LENGTH_LONG)
Tasty.Error("The operation could not be completed.")

La duración queda activa para los mensajes posteriores.


Reemplazo automático

Solo permanece un toast activo.

Tasty.Info("Connecting...")
Tasty.Success("Connected")

El segundo reemplaza al primero. La clase también usa CurrentTag para detener un loop de animación que ya no pertenece al toast actual.

Esto evita que varias notificaciones se apilen.


Cerrar haciendo clic

El Panel completo responde al mouse.

ToastPanel_MouseClicked
→ HideToast

El usuario puede cerrarlo antes de que expire.

La API pública actual no expone un método Close o Dismiss.


Las 47 animaciones

Éxito y estado positivo

Método Uso sugerido
Success(Message) operación completada
Done(Message) proceso finalizado
Signal(Message) conexión establecida
Battery(Message) batería / carga
Money(Message) pago o transacción
ElectricMeter(Message) medición / energía
Tasty.Success("Changes saved")
Tasty.Done("Export finished")
Tasty.Signal("Connection established")
Tasty.Battery("Battery fully charged")
Tasty.Money("Payment approved")
Tasty.ElectricMeter("Meter reading received")

Advertencia y atención

Método Uso sugerido
Warning(Message) advertencia general
Virus(Message) amenaza / antivirus
Bug(Message) bug / diagnóstico
Confused(Message) comando desconocido
Pin(Message) ubicación
Cat(Message) estado divertido
Dog(Message) estado divertido
BoxCat(Message) sorpresa
Tasty.Warning("Check the entered values")
Tasty.Bug("Bug report created")
Tasty.Confused("Unknown command")
Tasty.Pin("Location saved")

Acción intensa

Método Uso sugerido
Rocket(Message) lanzamiento / inicio
Fire(Message) actividad intensa

Información y sistema

Método Uso sugerido
Info(Message) información general
Search(Message) búsqueda
Cloud(Message) nube
Download(Message) descarga
Windows(Message) entorno Windows
Sync(Message) sincronización
Snow(Message) modo / efecto invierno
Neutral(Message) estado neutro
Config(Message) configuración

Datos y celebración

Método Uso sugerido
Mail(Message) email
Chart(Message) datos / reporte
Confetti(Message) celebración

Error y emoción

Método Uso sugerido
Error(Message) error
Angry(Message) acción rechazada
Love(Message) favorito / corazón
LoveFace(Message) valoración positiva
Kirby(Message) animación divertida
Cake(Message) celebración

Avisos y destacados

Método Uso sugerido
Bell(Message) aviso
Star(Message) favorito / destacado
Sunflower(Message) estado positivo
Pacman(Message) procesamiento divertido

Neutral, utilidades y especiales

Método Uso sugerido
Gift(Message) regalo
Ghost(Message) elementos ocultos
Rainbow(Message) tema / personalización
NoSignal(Message) sin conectividad
Dice(Message) azar
Lock(Message) seguridad
Sad(Message) sin resultados
FileAction(Message) archivo
Bulb(Message) idea

Todos reciben un único parámetro:

Message As String

Colores predeterminados

Sin personalización, los métodos se agrupan alrededor de familias cromáticas:

Familia Color base aproximado
Success teal / verde
Warning amarillo / ámbar
Rocket / Fire naranja
Info azul
Mail / Chart / Confetti violeta
Error / Love rojo profundo
Bell / Star marrón / dorado
Neutral / utilities slate / gris

Al activar degradados, algunos tipos usan combinaciones específicas de dos tonos.


UseGradient

Por defecto:

False

Activar:

Tasty.setUseGradient(True)
Tasty.setUseGradient(True)
Tasty.Success("Gradient success")
Tasty.Error("Gradient error")

Si se define BackColor personalizado, ese fondo sólido tiene prioridad sobre el degradado.


Alpha

Tasty.setAlpha(220)

La escala esperada es:

0 .. 255

En modo degradado se convierte a alpha CSS dividiendo el valor entre 255.

Tasty.setUseGradient(True)
Tasty.setAlpha(210)
Tasty.Info("Semi-transparent notification")

Nota

Con BackColor personalizado, la implementación actual asigna directamente ese color sólido y el alpha global no se mezcla automáticamente.


BackColor personalizado

Tasty.setBackColor(xui.Color_RGB(30, 30, 35))
Tasty.Info("Custom background")

El valor 0 significa “sin color personalizado”.

Tasty.setBackColor(0)

TextColor

Por defecto el texto es blanco.

Tasty.setTextColor(xui.Color_Yellow)

Restaurar comportamiento predeterminado:

Tasty.setTextColor(0)

Fuente personalizada

La fuente inicial se crea usando OpenSans-SemiBold.ttf con tamaño aproximado 15.

Tasty.setCustomFont(xui.CreateDefaultBoldFont(16))
Tasty.Success("Custom font")

CornerRadius

Campo público:

Tasty.CornerRadius = 18dip

Valor inicial:

25dip

Personalización completa

Dim Tasty As JTastyToast
Tasty.Initialize(MainForm.RootPane)

Tasty.CornerRadius = 18dip
Tasty.setDuration(Tasty.LENGTH_LONG)
Tasty.setUseGradient(True)
Tasty.setAlpha(225)
Tasty.setTextColor(xui.Color_White)
Tasty.setCustomFont(xui.CreateDefaultBoldFont(15))

Tasty.Download("Downloading update...")

Ejemplo de una operación real

Private Sub btnSync_Click
    Tasty.setDuration(Tasty.LENGTH_NORMAL)
    Tasty.Sync("Synchronizing with server...")

    Sleep(1500)

    If ServerAvailable Then
        Tasty.Success("Synchronization complete")
    Else
        Tasty.NoSignal("Server not available")
    End If
End Sub

El segundo mensaje reemplaza al primero.


Integración con jdashboard_WindowsStyle

Private ui As jdashboard_WindowsStyle
Private Tasty As JTastyToast

ui.Initialize(Me, MainForm, "ui", fx.Colors.RGB(30, 30, 46))
ui.RootPane.LoadLayout("Main")

Tasty.Initialize(ui.RootPane)

MainForm.Show
Tasty.Success("Application ready")

Así el toast se posiciona respecto al área visible de contenido de WindowsStyle.


Rendimiento

Mientras el toast está activo, Canvas se redibuja aproximadamente cada 20 ms.

Recomendaciones:

  1. úsalo para feedback importante, no como logger;
  2. evita decenas de llamadas por segundo;
  3. usa LENGTH_SHORT para confirmaciones frecuentes;
  4. reserva LENGTH_LONG para mensajes que necesiten lectura;
  5. recuerda que el toast nuevo reemplaza al activo.

Diferencia frente a un Toast tradicional

JTastyToast Toast tradicional
B4J / JavaFX normalmente nativo del sistema
Canvas animado icono estático o sin icono
47 tipos actuales pocas variantes
colores personalizados limitado
degradados poco habitual
alpha configurable limitado
fuente personalizada limitado
CornerRadius configurable
reemplazo automático depende de plataforma
se dibuja dentro de un Parent mensaje del sistema

API pública

Configuración

Initialize(Parent As B4XView)
setUseGradient(UseGradient As Boolean)
setDuration(DurationType As Int)
setAlpha(alpha As Double)
setBackColor(Clr As Int)
setTextColor(Clr As Int)
setCustomFont(fnt As B4XFont)

Campo:

CornerRadius As Int

Constantes:

LENGTH_SHORT
LENGTH_NORMAL
LENGTH_LONG

Métodos de notificación

Success
Signal
Battery
Money
Done
ElectricMeter
Virus
Warning
Cat
Dog
Bug
BoxCat
Confused
Pin
Rocket
Fire
Info
Search
Cloud
Download
Windows
Sync
Snow
Neutral
Config
Mail
Chart
Confetti
LoveFace
Love
Angry
Error
Kirby
Cake
Bell
Star
Sunflower
Pacman
Gift
Ghost
Rainbow
NoSignal
Dice
Lock
Sad
FileAction
Bulb

Detalles importantes de implementación

  • un solo toast activo;
  • el nuevo reemplaza al anterior;
  • clic para cerrar;
  • entrada de unos 600 ms;
  • salida de unos 600 ms;
  • Canvas de 45dip;
  • wrap de texto;
  • máximo interno de texto cercano a 400dip;
  • posición final 40dip sobre el borde inferior;
  • fondo sólido o degradado;
  • BackColor personalizado tiene prioridad;
  • no existe evento público de “toast cerrado”;
  • no existe Close / Dismiss público.

Inicio rápido recomendado

Private Tasty As JTastyToast

Tasty.Initialize(MainForm.RootPane)
Tasty.setDuration(Tasty.LENGTH_NORMAL)
Tasty.setUseGradient(True)

Tasty.Success("Ready!")