Spanish Label a pie de imagen

23021959Pepe

Member
Licensed User
Longtime User
Buenas tardes, he preferido abrir un nuevo post ya que llama más la atención uno nuevo que, una nueva pregunta en uno anterior.
Mi pregunta tiene que ver un poco con el anterior post "Visualizar imágenes o fotos" y es:
¿Como coloco un Label para que se muestre debajo de la imagen el nombre de la misma en el Scroll, y se desplace a la misma vez que las imágenes?
Este es el código que me facilito bgsoft y funciona de maravilla:

B4X:
Sub VerFicheros
   
    Dim Ficheros As List
    Dim Ok As Boolean
    Dim f As String
    Dim imagesFolder As String

    imagesFolder = File.DirDefaultExternal & "/Mapas"
   
    If File.Exists(imagesFolder, "") = False Then
        ToastMessageShow("No se ha encontrado la carpeta con imágenes: " & CRLF & imagesFolder, True)
    End If
   
    Ficheros = File.ListFiles(File.DirDefaultExternal & "/Mapas")
    'poner todos los ficheros en la lista
   
    If  Ficheros.Size  = 0 Then
        Msgbox("No existen Mapas","")
        Activity.Finish
    End If
    'Ajustar la altura de panel interior de acuerdo con el número de imágenes.
    Scroll1.Panel.Height = 400dip * Ficheros.Size
    For i = 0 To Ficheros.Size - 1
        DoEvents
        f = Ficheros.Get(i)
        If  f.ToLowerCase.EndsWith(".png") Then
            Dim b1 As ImageView
            b1.Initialize("ImageView1")
            b1.Color = Colors.Black
            b1.Gravity = Gravity.FILL
            b1.tag = f
            Try
                  b1.Bitmap = LoadBitmapSample(File.DirDefaultExternal & "/Mapas", f, 100%x ,100%y)
                Ok = True
            Catch
                  Log("Error en fichero")
                  Ok = False
            End Try
            If Ok Then
                Scroll1.Panel.AddView(b1, 45dip, 5dip + i * 400dip, 75%x ,75%y)
            End If
        End If
      DoEvents
    Next
End Sub

Saludos
Pepe
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Pepe

La forma es la misma igual que incrustaste una imagen, incrusta un label o lo que quieras en la parte de la condición OK. Y dale el tamaño y lo pones abajo, arriba a la derecha o donde quieras.

Añade algo asi:

B4X:
   Dim l As Label
   l.Initialize("")
   l.Text= Texto
   I.Tag = Texto ' por si despues quieres saber el texto del label
   l.Color = Colors.Black  ' color de fondo
   l.TextColor= Colors.White ' color del texto
   l.TextSize = 20 ' tamaño del texto
   l.Gravity= Gravity.Left ' posicionar el texto a la izquierda del label

  If Ok Then
   Scroll1.Panel.AddView(b1, 45dip, 5dip + i * 400dip, 75%x ,75%y)
   Scroll1.Panel.AddView(l, left, top, ancho,alto)
  end if

Aunque te recomiendo que insertes un panel, y sobre este panel insertes el resto de cosas, te sera mas facil todo.
Y ya de paso lo estructuras de forma que la creación de los objetos sea en un sub independiente (If Ok Then CrearObjetos (Texto, Imagen, pos, etc) )

Y para insertar todo en un panel lo puedes hacer asi:

B4X:
Dim b1 As ImageView
b1.Initialize("ImageView1")
b1.Color = Colors.Black
b1.Gravity = Gravity.FILL
b1.tag = f
Try
b1.Bitmap = LoadBitmapSample(File.DirDefaultExternal & "/Mapas", f, 100%x ,100%y)
Ok = True
Catch
Log("Error en fichero")
Ok = False
End Try

If Ok Then
' creamos el panel
Dim p As Panel
p.Initialize("Evento para el Click, por ejemplo")
p.Color = Colors.Black
p.Tag = Texto

p.AddView(b1,45dip, 5dip + i * 400dip, 75%x ,75%y) ' insertar imagen en panel

Dim l As Label
l.Initialize("")
l.Text= Texto
I.Tag = Texto ' por si despues quieres saber el texto del label
l.Color = Colors.Black ' color de fondo
l.TextColor= Colors.White ' color del texto
l.TextSize = 20 ' tamaño del texto
l.Gravity= Gravity.Left ' posicionar el texto a la izquierda del label
p.AddView(l, left, top, ancho,alto) ' insertar texto en panel

PanelScroll.Panel.AddView(p,lef,top, ancho, alto) ' insertamos el panel con todo en el Scroll

end if

Saludos
 
Last edited:

23021959Pepe

Member
Licensed User
Longtime User
Gracias Jesús, todo OK.
Había probado cuarenta mil formas pero no caí en

B4X:
 Scroll1.Panel.AddView(l, left, top, ancho,alto)

Es la falta de experiencia.

Saludos
Pepe
 
Top