Italian Menu grafico

ken87

Active Member
Licensed User
Longtime User
Ciao volevo ottenere un menu grafico fatto di immagini caricati da un database o un sito esterno ottenedo un efetto simile all'allegato sotto?
Il controllo imageview lo devo fare con il codice o lo faccio da interfaccia se volessi che prendessero il 50%
ciacuna?
efetto bordo bianco come posso inserirlo?
Grazie mille
 

Attachments

  • menubase.jpg
    menubase.jpg
    21 KB · Views: 394
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Se vuoi farlo identico, ovvero con 6 menu precisi, puoi farlo da Designer, altrimenti dovrai farlo da codice (intendo dire se il numero di imageview e quindi voci del menu dovessere essere variabile, dinamico).

Per le dimensioni dovrai usare lo script del Designer oppure, appunto se lo crei da codice, non sarà difficile fare i calcoli (50%x, ad esempio).

Per le righe bianche puoi fare in due modi:

Creare un panel sottostante bianco e sei panel dentro questo, delle dimensioni adatte per far vedere solo le linee bianche.
Oppure creare un ColorDrawable per ognuno dei sei panel, impostando il bordo bianco.

[Nel caso in cui il numero di immagini-voci-menu fosse variabile e magari su smartphone fossero troppo piccoli, puoi usare una ScrollView o CustomListView]
 
Last edited:

ken87

Active Member
Licensed User
Longtime User
Ciao
Grazie
tenterò di provare qualcosa.. per caricare immagine da un sito esterno che istruzione o libreria devo usare?
Grazie per ora
 

udg

Expert
Licensed User
Longtime User
Ciao.
Proprio oggi ho realizzato qualcosa di simile per un altro membro del forum. Consideralo come ispirazione e modifica tutto quello che non corrisponde al tuo progetto.
Di librerie per il download da server remoti di immagini ce ne sono tante. Fai una ricerca tenendo a mente le caratteristiche del sito reale da cui devi prelevare le immagini (es. ha FTP abilitato? dispone di un webservice apposito? etce tc).
 

ken87

Active Member
Licensed User
Longtime User
Compilando ho il seguente errore:
B4A Versione: 7.30
Analisi del Codice. (0.01s)
Compilazione del codice. Error
Errore nella compilazione del programma.
Descrizione dell'errore: Membro sconosciuto: ellipsize
Errore nella linea: 63
Stitle.Ellipsize = "END"
Word: ellipsize
 

udg

Expert
Licensed User
Longtime User
Strano; ho la stessa versione di B4A. Comunque puoi commentare/eliminare quella linea. Serve per mostare dei puntinii di sospensione se la stringa è troppo lunga.

Nota: avevo sostituito l'upload originale con un secondo che gestisce anche i click per l'incremento e decremento della quantità. Tutta roba che a te non serve, ma comunque..
 

ken87

Active Member
Licensed User
Longtime User
ecco i log:
Logger connesso a: emulator-5554
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
** Activity (main) Pause, UserClosed = false **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Class not found: b4a.example.customlistview150, trying: b4a.exampley.customlistview150
Panel size is unknown. Layout may not be loaded correctly.
Tipo Stitle: android.widget.TextView
Panel size is unknown. Layout may not be loaded correctly.
Tipo Stitle: android.widget.TextView
Panel size is unknown. Layout may not be loaded correctly.
Tipo Stitle: android.widget.TextView
Panel size is unknown. Layout may not be loaded correctly.
Tipo Stitle: android.widget.TextView
Panel size is unknown. Layout may not be loaded correctly.
Tipo Stitle: android.widget.TextView
Panel size is unknown. Layout may not be loaded correctly.
Tipo Stitle: android.widget.TextView
** Activity (main) Resume **
 

udg

Expert
Licensed User
Longtime User
Ok, quindi il problema compilazione è ora superato, giusto?
Gli avvisi "panel size unknown" non dovrebbero preoccupare.
Guarda solo se il tutto funziona e poi modifica prima il lytCell in modo che corrisponda a ciò che realmente ti occorre e poi MakeGrid di conseguenza.
 

ken87

Active Member
Licensed User
Longtime User
Ho dovuto mettere il commento dove da errore se non non compilava
 

ken87

Active Member
Licensed User
Longtime User
Ciao ho provato a fare alcune prove inserendo due immagini uguali affiancate .
Usando lo script
B4X:
'All variants script
AutoScaleAll
ImageView2.Width =44%x
ImageView1.Width =44%x

Ma il risultato che ottengo è diverso dal telefono all'emulatore (Vedi allegato)
Nel telefono va bene nel cellulare no.
Includo anche esempio .

codice
B4X:
#FullScreen: False
    #IncludeTitle: True
    #ApplicationLabel: ScrollViewBigPanel
    #VersionCode: 1
    #VersionName:
    #SupportedOrientations: portrait
    #CanInstallToExternalStorage: False
#End Region

'Activity module
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

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.
    Dim scvTest As ScrollView
    Dim pnlTest As Panel
    Private Panel1 As Panel
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Main")
    scvTest.Panel.LoadLayout("menufoto")
    'scvTest.Panel.Height = pnlTest.Height
    scvTest.Panel.Height = Panel1.Height
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub edtItem_FocusChanged (HasFocus As Boolean)
    Dim Send As EditText
  
    If HasFocus Then
        Send = Sender
      
        scvTest.ScrollPosition = Send.Top - 10dip
    End If
End Sub

Potete fare un controllo per capire cosa sbaglio?
 

Attachments

  • vedidue.jpg
    vedidue.jpg
    60.5 KB · Views: 265
  • vediemu.jpg
    vediemu.jpg
    66.5 KB · Views: 292
  • menufoto.bal
    2.8 KB · Views: 241

ken87

Active Member
Licensed User
Longtime User
Ciao udg,
Ho riprovato il tuo programma che hai fatto tu, gira ma non funziona evento click dei tasti più questo codice :

B4X:
Sub ivIncr_Click
    Dim iv As ImageView = Sender
    Dim row As Int =clvGrid.GetItemFromView(iv)
    Dim rowpnl As Panel = clvGrid.GetPanel(row)
    Dim bckpnl As Panel  = rowpnl.GetView(0)        'layout has a backpanel as its foundation
    For i = 0 To bckpnl.NumberOfViews - 1
        Dim cellpnl As Panel = bckpnl.GetView(i)
        Dim bckp As Panel = cellpnl.GetView(0)
        Dim iv1 As ImageView = bckp.GetView(5)        'increment icon
        If iv1 = Sender Then
            Dim lblqty As Label = bckp.GetView(4)    'label for quantity
            Dim qty As Int = lblqty.Text
            qty = qty + 1
            lblqty.Text = qty
            Exit
        End If
    Next
End Sub

Sub ivDecr_Click
    Dim iv As ImageView = Sender
    Dim row As Int =clvGrid.GetItemFromView(iv)
    Dim rowpnl As Panel = clvGrid.GetPanel(row)
    Dim bckpnl As Panel  = rowpnl.GetView(0)        'layout has a backpanel as its foundation
    For i = 0 To bckpnl.NumberOfViews - 1
        Dim cellpnl As Panel = bckpnl.GetView(i)
        Dim bckp As Panel = cellpnl.GetView(0)
        Dim iv1 As ImageView = bckp.GetView(3)        'decrement icon
        If iv1 = Sender Then
            Dim lblqty As Label = bckp.GetView(4)    'label for quantity
            Dim qty As Int = lblqty.Text
            qty = qty - 1
            If qty < 0 Then qty = 0
            lblqty.Text = qty
            Exit
        End If
    Next
End Sub

Non viene mai eseguito.
Puoi controllare quello che non fuziona?
Alla fine mi va bene anche a me perchè stavo cercando di fare un carello di prodotti
Grazie mille
 

udg

Expert
Licensed User
Longtime User
Ciao. Ho appena provato e sembra funzionare regolarmente.
Prova ad utilizzarlo in landscape in modo che i tasti "+" siano un po' più grandi, magari è solo un problema di riuscire a "centrare" il tastino che su shermi piccoli in effetti non sempre viene colpito con accuratezza (almeno, ciò è quanto verifico sul mio cellulare dove con un po' di pazienza ed attenzione anche i micro tastini si riescono a premere ottenendo incrementoe decremento della quantità).
Ricorda la premessa: l'esempio non è un "prodotto" ma semplicemente uno schema di funzionamento utile a mostrare a chi ne aveva fatto richiesta come procedere.
 

ken87

Active Member
Licensed User
Longtime User
Ciao ora provo,
non devo fare un vero carello ma un sitema di prenotazione on line che va a salvare su database..
qualche suggerimento?
 

ken87

Active Member
Licensed User
Longtime User
Ho riprovato funziona.
Il mio programma e una sorta di prenotazioni pizze.
Se volessi che quando clicco la foto aparisse una finestra con una foto e dettagli della piazza come posso fare?
 

udg

Expert
Licensed User
Longtime User
Un sistema potrebbe essere quello di mostrare un pannello contenente le informazioni aggiuntive in sovrimpressione.
In pratica aggiungi da codice un pannello alla stessa Activity che stai visualizzando, usi una saturazione colore minore del 100% così si intravede il contenuto originale e completi il pannello cone le informazioni che ti occorrono, magari tratte da un DB locale o richieste al volo ad un server remoto.
Un click sul pannello e lo distruggi ritornando al contenuto originale.
 

ken87

Active Member
Licensed User
Longtime User
Ciao Udg,
volevo un aiutino su questo tuo codice
B4X:
Dim bckp As Panel = cellpnl.GetView(0)
        Dim image As ImageView = bckp.GetView(0)    'image view
        image.Bitmap = LoadBitmapSample(File.DirAssets,"pizza.png",bckp.Width, bckp.Height/2)
        Dim title As Label = bckp.GetView(1)        'title
        title.Text = "Pizza Margherita  "
        Dim Stitle As Label = bckp.GetView(2)        'subtitle
        Stitle.Text = "Sugo,Mozarella"
Se volessi aggiungere un altro panello esempio prezzo avevo pensato
B4X:
  Dim Stitle As Label = bckp.GetView(3)        'nuova label
title.Text = "Prezzo 10  "
Per fare cosi dovrei immagino inserire un altra laber nellìactivity , ma non ho capito il legame tra interfaccia e il codice.
Potresti postare le modifiche da fare?
Se inserisco il codice nuovo va in errore.
Grazie mille
 

udg

Expert
Licensed User
Longtime User
Qualcosa tipo:
B4X:
Dim Prezzo As Label = bckp.GetView(3) 'nuova label posta dopo immagine, title e subtitle
Prezzo.Text = "Prezzo 10 "
Ricorda che l'ordine in cui le view vengono aggiunte al backpanel è importante. Per questo motivo hai:
GetView(0) - immagine
GetView(1) - titolo
GetView(2) - sottotitolo
GetView(3) - prezzo
Se i pannellini vengono creati nel Designer allora l'ordine è quello che vedi nel TreeView, quindi assicurati di ordinare gli elementi (trascinandoli) in modo che corrispondano poi al codice che vai a scrivere.
 

ken87

Active Member
Licensed User
Longtime User
Ciao,
Istruzione GetView fa parte della tua libreria oppure è un comando stadar che permette la visualizzazioni dei panelli?
Quindi io creo un activity metto 4 panelli e poi visualizzo con GetView(x) giusto?
 
Top