Italian Creare una mappa con elementi cliccabili?

Walter Scafati

Active Member
Licensed User
Longtime User
Buongiorno,
mi servirebbe un consiglio su come creare una mappa di un locale dove aggiungerci sopra, dinamicamente, dei simboli (cerchio o quadrato) in corrispondenza dei punti luce. Questi simboli devono essere cliccabili in modo che io poi possa mandare il comando di accensione o spegnimento della lampada.
Come posso fare?

Grazie
 

Walter Scafati

Active Member
Licensed User
Longtime User
Si riguardo la planimetria avevo pensato di caricare un PNG o JPG ma come si fa a creare in esecuzione dell'app delle icone nel punto richiesto dall'utente dell'app?
Inoltre la planimetria più' le icone dovaranno essere mantenute anche nei successivi riavvii della app.
 

LucaMs

Expert
Licensed User
Longtime User
come si fa a creare in esecuzione dell'app delle icone nel punto richiesto dall'utente dell'app
Se intendi dire a runtime, mettendo un panel, anziché una ImageView, intercetti l'evento Touch che ti restituisce le coordinate x,y.


dovaranno essere mantenute anche nei successivi riavvii della app.
Database SQLite con le coordinate. Se hai bisogno solo di queste, quindi due dati, hai tante altre possibilità per salvarli: un file di testo, KeyValueStore, ...
 

Walter Scafati

Active Member
Licensed User
Longtime User
Grazie per le tempestive risposte.
Il salvataggio delle coordinate su db è perfetto perché già lo utilizzo quindi dovrei solo aggiungere due colonne per le coordinate.

Per quanto riguarda il panel gli devo caricare il jpg della planimetria comprendente dei simboli dei punti luce?
 

LucaMs

Expert
Licensed User
Longtime User
Direi che puoi caricare l'immagine nel background del panel e poi usare un Canvas per "disegnare" le icone nel punto toccato dall'utente
(disegnare tra virgolette, perché puoi usare il suo metodo DrawBitmap).
 

Walter Scafati

Active Member
Licensed User
Longtime User
Quindi vuoi dire che l'utente piazzerebbe a suo piacimento il simbolo (cioè una icona) nei punti dove sono posizionati i punti luce e allla fine potrei salvare le coordinate di tutti i punt? C'è qualche esempio in giro da poter consultare?
 

LucaMs

Expert
Licensed User
Longtime User
Sì, però ho visto che non deve solo piazzarli a proprio piacimento, ma poi deve usarli, ovvero clickarci sopra e, per quanto ne so, i Canvas non rispondono poi ad un evento, come click.

Puoi fare in due modi diversi:

1) crei un oggetto List a livello globale che conterrà delle ImageView con le icone; quando l'utente tocca il pannello, aggiungi una nuova ImageView al pannello, nelle coordinate toccate, e la stessa ImageView nella List (e salvi le coordinate). Quando crei la nuova ImageView la inizializzi con un nome evento, come si fa normalmente:
imvPuntoLuce.Initialize("PuntoLuce"). A quel punto tutte le ImageView aggiunte avranno lo stesso nome evento, per cui userai:
Private Sub PuntoLuce_Click
dim imvToccata As ImageView = Sender
' Accendi / spegni
End Sub

2) usando i Canvas, dovresti verificare, sempre tramite le coordinate ricevute nell'evento Touch del pannello, a quale bitmap disegnata tramite canvas corrisponde il "touch" (più complicato, anche se non troppo, ma risparmi un po' di memoria, in quanto non crei le ImageView).

Puoi trovare tanti esempi sui Canvas e MioCanvas.DrawBitMap.

Direi che potresti fare una prova del suggerimento 1), in un progetto solo di prova, appunto. Se poi hai dei problemi, pubblicalo qui e ti daremo una mano.
 

Walter Scafati

Active Member
Licensed User
Longtime User
Salve Luca,
nel frattempo avevo intrapreso la soluzione 2 e visto che ho già implementato graficamente il posizionamento dei punti luce proverei ad andare avanti con il canvas.
Per gestire il click infatti pensavo di gestire le coordinate del punto registrato in DB con quelle rilevate nel "touch".
Faccio qualche prova e ti faccio sapere, intanto grazie per l'aiuto che mi stai fornendo.
 

Mauroz

Member
Licensed User
Longtime User
Io l'ho fatto prendendo le coordinate da un panel e salvando il tutto su un file di testo ini, se ti serve ti passo il progetto intero
 

Walter Scafati

Active Member
Licensed User
Longtime User
Grazie Mauroz ma sono a buon punto, sono riuscito a piazzare le i simboli sul panel (nel quale ho caricato il .PNG della planimetria) con canvas e salvo le coordinate su Db. Oa mi manca solo una cosa. Come si fa, nel caso di delete dei simboli, per rimuovere gli oggetti che ho piazzato sulla mappa? Ho usato un panel e sopra ho creato dei rect nei quali ho disegnato con il canvas il simbolo in .PNG
 

LucaMs

Expert
Licensed User
Longtime User
Una volta disegnata, non c'è modo di eliminarla, senza eliminare anche la parte sottostante.
L'unico sistema, in questo caso, è disegnare nuovamente ciò che c'era prima di aver disegnato la png, esattamente come disegni la png.
Questo significa che devi "prelevare" la parte sottostante prima di disegnare il punto luce; per fare questo, prova a cercare sul sito.

Capisco che dopo il lavoro che hai fatto, saarebbe una scocciatura, ma... usare il metodo 1) del post #8 è più semplice e rapido.
 

Walter Scafati

Active Member
Licensed User
Longtime User
Una volta disegnata, non c'è modo di eliminarla, senza eliminare anche la parte sottostante.

Se ho capito bene deve essere disegnato un rettangolo vuoto su quello che conteneva il simbolo (rettangolo vuoto o dello stesso colore del fondo?)

L'unico sistema, in questo caso, è disegnare nuovamente ciò che c'era prima di aver disegnato la png, esattamente come disegni la png.
Questo significa che devi "prelevare" la parte sottostante prima di disegnare il punto luce; per fare questo, prova a cercare sul sito.

Capisco che dopo il lavoro che hai fatto, saarebbe una scocciatura, ma... usare il metodo 1) del post #8 è più semplice e rapido.

ma se ridisegno di nuovo l'immagine di sfondo e poi ripiazzo tutte le icone (leggendole dal DB) tranne quella cancellata?
 

LucaMs

Expert
Licensed User
Longtime User
Se ho capito bene deve essere disegnato un rettangolo vuoto su quello che conteneva il simbolo (rettangolo vuoto o dello stesso colore del fondo?)
Dovresti ridisegnare quello che c'era sotto, ovvero la parte di planimetria.

ma se ridisegno di nuovo l'immagine di sfondo e poi ripiazzo tutte le icone (leggendole dal DB) tranne quella cancellata?
Giusto, questo è il sistema migliore, avendo usato i canvas.
 

udg

Expert
Licensed User
Longtime User
Hai provato a sovrapporre due pannelli?
Quello sottostante riporterebbe la planimetria mentre quello superiore sarebbe trasparente. Su quest'ultimo useresti i canvas per i "rettangoli" informativi. A quel punto per eliminare un rettangolo basterebbe renderlo nuovamente trasparente.

udg
 
Top