Spanish Como crear una ventana de Splash

desof

Well-Known Member
Licensed User
Longtime User
Hola acabo de adquirir la licencia de uso y estoy muy entusiasmado con este producto por que ya me estaba haciendo la idea que mis 15 años de experiencia en visual basic se iban a perder en vano y veo que no es así gracias a esto por que es muy facil leer el código de los ejemplos y codificarlos.
Me dificulta mucho el conocimiento del ingles por eso ire dejando preguntas puntuales.

Como genero un form splash que cuando abre la aplicación se muestra unos segundos ?? y se cierra solo, de ser posible con alguna animación....

Gracias!!
 

jota

Active Member
Licensed User
Longtime User
Hola, mejor no pienses en forms aqui tienes que pensar en paneles y actividades una manera de hacerlo seria esta.
Sub ventana
Dim p As Panel
Dim l(2) As Label

p.Initialize("p")
l(0).Initialize("")
l(1).Initialize("")
Activity.AddView(p,50dip,25%y,(100%x-100dip),50%y)
p.AddView(l(0),0,0,p.Width,p.Height/2)
p.AddView(l(1),0,l(0).Height,l(0).Width,l(0).Height)
p.Color=Colors.DarkGray
l(0).Text = "Hola"
l(1).Text = "Esto es una prueba"
l(0).Gravity = Gravity.CENTER
l(1).Gravity =l(0).Gravity
wait(5)
p.Visible = False
p.RemoveAllViews
p.RemoveView
End Sub
Sub wait(segundos As Int)
Dim ti As Long
ti = DateTime.Now + (segundos * 1000)
Do While DateTime.Now < ti
DoEvents
Loop
End Sub

Llamando a ventana deberia abrir una ventana con un saludo 5 segundos y cerrarse. :)
 

desof

Well-Known Member
Licensed User
Longtime User
Perfecto vamos mejorando

Hola Jota muchas gracias por tu aporte y por tu concejo de no pensar en forms.

Lo prové y me anduvo OK ahora me queda una duda ya que no se si lo hice bien al Procedimiento Ventana lo llame desde el evento Activity_Create ¿Está bien?
y Como hago para que no se vean los controles que están en la Activity Prinicipal por que aparecen abajo del splah? supongo los oculto en diseño y los muestro al terminar 'Ventana' ... no?
 
Last edited:

irda

Member
Licensed User
Longtime User
Muy interesante, es lo que estaba buscando, pero y si en lugar de texto quiero poner una imagen?

gracias
 

jota

Active Member
Licensed User
Longtime User
solo tienes que incorporar un objeto ImageView en lugar de un label.
 

desof

Well-Known Member
Licensed User
Longtime User
Me sirvió lo que Jota aporto para solucionar esto pero al final luego adopte otro metodo, coloca un imageView y lo situas encima de todo durante unos segundos y luego lo ocultas aca va el code

B4X:
Sub Activity_Create(FirstTime As Boolean)   
   Activity.LoadLayout("layout")
   If FirstTime=True Then 
      Splash   
   End If
End Sub

Sub Splash
   wait(5)
   Dim bmp As Bitmap
   bmp.Initialize(File.DirAssets,"fondo.png")
   ImageView1.Visible=True
   ImageView1.SetBackgroundImage(bmp)
   ImageView1.Top=42dip
   ImageView1.Height =100%y-42dip
   ImageView1.Visible=True
   ImageView1.SendToBack 
End Sub

Sub wait(segundos As Int)
   Dim ti As Long
   ti = DateTime.Now + (segundos * 1000)
   Do While DateTime.Now < ti
      DoEvents
   Loop
   ImageView1.Visible=False
End Sub

Y en el diseñador de Script coloca esto para ajustar el tamaño de la imagen

AutoScaleAll
ImageView1.SetLeftAndRight (0,100%x)
ImageView1.SetTopAndBottom (0,100%y)
 

irda

Member
Licensed User
Longtime User
Intentaré esa solución, lo de poner un ImageView me esta dando el siguiente error:
java.lang.RuntimeException: Object should first be initialized (ImageView).

pongo el código por si sirve de algo:
HTML:
<code>
Sub Activity_Create(FirstTime As Boolean)

   Activity.LoadLayout("Formuno")
   If FirstTime = True Then
      ventana
   End If
   
End Sub


Sub ventana
   Dim p As Panel
   Dim b1 As ImageView
        b1.Bitmap = LoadBitmap(File.DirAssets, "logocolor.gif")
   p.Initialize("p")
   Activity.AddView(p,50dip,25%y,(100%x-100dip),50%y)
   p.AddView(b1, 1, 1, 75%x, 75%y)
   p.Color=Colors.DarkGray
   wait(5)
   p.Visible = False
   p.RemoveAllViews
   p.RemoveView
End Sub

</code>

Ya se nota que soy un novato pero este mundillo me esta pareciendo muy interesante.
 

socialnetis

Active Member
Licensed User
Longtime User
Intentaré esa solución, lo de poner un ImageView me esta dando el siguiente error:
java.lang.RuntimeException: Object should first be initialized (ImageView).

pongo el código por si sirve de algo:
B4X:
Sub Activity_Create(FirstTime As Boolean)

   Activity.LoadLayout("Formuno")
   If FirstTime = True Then
      ventana
   End If
   
End Sub


Sub ventana
   Dim p As Panel
   Dim b1 As ImageView
   b1.Initialize("")      '<-- Faltó Esto
   b1.Bitmap = LoadBitmap(File.DirAssets, "logocolor.gif")
   p.Initialize("p")

   Activity.AddView(p,50dip,25%y,(100%x-100dip),50%y)
   p.AddView(b1, 1, 1, 75%x, 75%y)
   p.Color=Colors.DarkGray
   wait(5)
   p.Visible = False
   p.RemoveAllViews
   p.RemoveView
End Sub

Ya se nota que soy un novato pero este mundillo me esta pareciendo muy interesante.

Te faltó inicializar el ImageView.
Utilizar la función wait de esa forma (con un while vacio) en la que traba el hilo principal es mala práctica. Para eso convendría usar un Timer
 
Top