Spanish Como manejar varias imágenes en el customlistview

ocalle

Active Member
Licensed User
Longtime User
Hola a todos, estoy usando el xcustom listview que diseñó Erel,

https://www.b4x.com/android/forum/t...platform-native-ui-library.84359/#post-534432

Anda todo muy bien, no que no tengo claro y no encuentro documentación como puedo definir mas de una imagen en un layout de items?, en el ejemplo maneja una y carga una lista de 4, me gustaria saber como es el proceso para agregar distintas imagenes en distintos imageview

En ejemplo en item layout hay dos checkboxes, un boton de borrar y un imageview.

Para el caso de agregar 2 o mas imageview como podria hacer?

B4X:
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Main")
    Dim images As List
    images.Initialize
    For Each f As String In Array("pexels-photo-446811.jpeg", "pexels-photo-571195.jpeg", _
        "pexels-photo-592798.jpeg", "pexels-photo-736212.jpeg")
        images.Add(LoadBitmapResize(File.DirAssets, f, 100dip, 100dip, True))
    Next
    For i = 1 To 20
        Dim iv As ItemValue
        iv.Initialize
   
        CLV1.Add(CreateItem(images.Get(i Mod images.Size), iv), iv)
                                                              ^Que función es esta

 Acá es donde no tengo claro manejar mas de un imageview        

'CLV1.Add(CreateItem(images.Get(i Mod images.Size), iv), iv)
       
       
    Next
    Activity.AddMenuItem("Find checked items", "find")
End Sub

Desde ya cualquier ayuda será muy apreciada. Gracias!
 

clarionero

Active Member
Licensed User
Longtime User
Hola. Por suerte no es muy complicado. Para ello debes modificar 2 cosas:

1) Definir un nuevo diseño de linea o actualizar el ya existente en el diseñador grafico de B4X. En el ejemplo ese diseño se llama en "Card1". Ahi puedes poner todas las vistas y tipos de vistas que necesites.

2) El procedimiento "CreateItem", donde rellenas cada linea con los valores adecuados antes de llamar a CLV1.Add para incluir esa linea en la lista. Como ves en el ejemplo se le pasa un nombre de imagen de la lista de imagenes definida del ejemplo, solo tienes que pasarle ahi otro nombre de imagen, de modo que ese procedimiento es quien define los contenidos de la linea.

Un saludo

Rubén
 

ocalle

Active Member
Licensed User
Longtime User
Muchas gracias, seria algo parecido a esto?
clv1.Add(CreateItem(clv1.AsView.Width, $"This is item #${i}"$, dispositivos.Get(i - 1), content))

Despues que escribi eso encontre esto
ImageView1.SetBitmap(xui.LoadBitmapResize(File.DirAssets, Image, ImageView1.Width, ImageView1.Height, True))

Tendria que poner tantos imageview como hubiera en cada card no?
 
Last edited:

clarionero

Active Member
Licensed User
Longtime User
Hola, tienes que pasarle como parametro a CreateItem la información que cambia en cada linea de la lista: imagenes, textos, etc, para poder asignar esos valores en la creacion de la linea. La ventaja de que sea una clase es que precisamente puedes definir a tu antojo el contenido de las lineas. Es mas, incluso podrias pasarle el nombre de un layout de diseño de pantalla para poder asignar lineas con diferentes estructuras, unas con imagnes, otras sin ellas, etc

Un saludo

Rubén
 

ocalle

Active Member
Licensed User
Longtime User
Muchas Gracias Rubén. Existe alguna documentación de customlistview descriptiva? como otras bibliotecas?
 

Carlos marin

Active Member
Licensed User
Longtime User
Hola, mira este ejemplo:
aqui llamo al CLV y le envio en un string el nombre de la imagen

B4X:
CLV1.Add(CreateItem(CLVcat.AsView.Width, $"Cliente #${i}"$, imagen ), i)

aqui obtengo la imagen y la cargo en un img. puedes enviar tantos como quieras incluso puedes cargarlos desde un servidor o una pagina web con un servicio

B4X:
Private Sub CreateItem(Width As Int, Title As String, imagen  As String ) As Panel

    Dim p As B4XView = xui.CreatePanel("")
    Dim height As Int = 70dip
    If GetDeviceLayoutValues.ApproximateScreenSize < 4.5 Then height = 110dip
    p.SetLayoutAnimated(0, 0, 0, 70dip, height)
    p.LoadLayout("CellItemcat")
    img.Bitmap = LoadBitmapSample(File.DirAssets, imagen &".png",50%x,50%y)
    Return P
End Sub
 

ocalle

Active Member
Licensed User
Longtime User
Hola muchas gracias por el ejemplo, dos dudas CLVcat.AsView.Width de donde proviene? y imagen la puedo cargar en un array de imagenes? valga la redundancia? puede ser de esta forma?
Dim imagenes As List = Array("pexels-photo-446811.jpeg","pexels-photo-571195.jpeg","pexels-photo-736212.jpeg","pexels-photo-592798.jpeg")

Muchas gracias el ejemplo es muy util y claro.
 

ocalle

Active Member
Licensed User
Longtime User
Carlos lo pude resolver! muchas gracias a todos
B4X:
    image2.Bitmap=LoadBitmapResize(File.DirAssets,imagenes.Get(i+1),50%x,50%y,True)
 

Carlos marin

Active Member
Licensed User
Longtime User
Carlos lo pude resolver! muchas gracias a todos
B4X:
    image2.Bitmap=LoadBitmapResize(File.DirAssets,imagenes.Get(i+1),50%x,50%y,True)

Hola ocalle ya te iba a responder, si men excelente así es. por si las dudas CLVcat es el nombre que le puse al Customlistview (tu le pones el que desees), puedes cargar las imágenes que desees (mientras mas cargues mas memoria consume). después veras los grandes beneficios de combinarlo con el ImageDownloader, echale un vistaso cuando puedas, éxitos!
 

jmrodriguezr18x

New Member
Buenas noches amigos muy interesante el tema me gustaria saber como lloamar estas imagenes desde una base mysql
me explico algo sencillo y que mucho hemos hecho es la subida de imagenesn html y php imagino que estan familiarizados si no es que es un ejercicio para principiantes como yo

mi pregunta es digamos ya subi 5 imagenes como saben
la imagen va a una carpeta "/imagenes"
la descripcion y el nombre de la imagen vana dos campos de una base de datos llamada "virtual" y la tabla llamada "tvirtual"
esta tabla "tvirtual" contiene, 3 campos id "autonumerico" no "nombre o descripcion" im "nombre de la imagen y extencion"

sabiendo esto como puedo llamar esos 3 campos en customlistview y llenarlos automaticamente desde la base de datos con los datos de esa tabla tvirtual y la imagen de la carpeta,

en un index.php con codigo html yo los traigo asi algo enredado aun con el tema como dije principiante pero asi los llamo


<?php

while ($dato=mysqli_fetch_array($res))
{
echo '<img class="loadimagenes"onmouseover="imgone(this)" onmouseout="imgnormal(this)" border="0" src="'."subidos/".$dato['imagen'].'"width="100px" height="110" alt="">';
echo $dato['descripcion'];

}
?>

saludos espero me puedan ayudar y gracias de antemano
 
Last edited:
Top