Italian RESIZE DI UN PANEL "CON LE DITA"

Star-Dust

Expert
Licensed User
Longtime User
Non devi usare B4XObject che ti restituisce una B4XView ma NativeObject che ti restituisc eun Panel e ti permette di avere più impostazioni che la B4xView non ti permette.
B4X:
B4XPanel1.NativeObject.SetBackgroundImage(Image).Gravity=Gravity.BOTTOM
 

Star-Dust

Expert
Licensed User
Longtime User
è perfetto


è perfetto, sarà sicuramente utile a molta gente. Per caso è possibile espandere la funzione del drag (trascinamento) in qualsiasi punto del panel ?
Ho aggiornato alla versione 0.11 che permette di attivare una proprietà che rende tutta la superficie del pannello sensibile per il trascinamento
 

Matteo Granatiero

Active Member
Licensed User
Ho aggiornato alla versione 0.11 che permette di attivare una proprietà che rende tutta la superficie del pannello sensibile per il trascinamento
Sei un grande, reposto qui perchè magari puo servire a qualcuno ricercando questo problema! Grazie ancora!
B4X:
AllSurfaceMove As Boolean
' The entire surface of the panel allows dragging
 

udg

Expert
Licensed User
Longtime User
@Star-Dust : leggendo i post precedenti (ma non provando il progetto) mi è venuta un'idea; che ne dici di un nuovo componente, pressoché identico a quello qui illustrato, che reagisca in modo diverso se riceve un tap, un touch o un long touch (o anche un doppio touch)? Si potrebbe così attivare la funzione trascinamento o ridimensionamento in funzione del tipo di tocco (e se sei in vena, magari cambiare "al volo" il bordo in modo da far capire in che modalità ci si trova).

Basterebbe anche solo gestire uno "stato" che cambia ad ogni tap (come una volta era per il cursore di inserimento/modifica).
Primo tap, il componente si pone in stato trascinamento, il bordo è formato da trattini (o quel che è). L'utente può trascinare effettuando il touch in un punto qualunque del pannello e trascinando dove vuole. Oppure effettua un secondo tap.
Secondo tap, modalità ridimensionamento, bordo rosso a pallini gialli (scherzo). Con le modalità che hai già mostarto si effettua un ridimensionamento senza che cambi la posizione del pannello.

E' solo un'idea. Ma se la tua regione divenisse rossa e fossi costretto in casa (e non avessi di emglòio da fare)... :)
 

Star-Dust

Expert
Licensed User
Longtime User
Diciamo che in quella vista il Click e DoubleClick sono restituiti allì'utente, vengono assorbiti/gestiti solo i touch.
Pero si può fare inserendo nell'evento click o doppio click l'apertura di un menu che permette di scegliere il trascinamento o ridimensionamento.
Nel pannello stesso si possono inserire dei bottoni in alto del Panel che possano attivare le proprietà di trascinamento e/o ridimensionamento.

Ora ti faccio un esempio che spiega quello che intendo
 

udg

Expert
Licensed User
Longtime User
Non preoccuparti, ho capito quello che intendi
 

LucaMs

Expert
Licensed User
Longtime User
Si potrebbe così attivare la funzione trascinamento o ridimensionamento in funzione del tipo di tocco
Diciamo che in quella vista il Click e DoubleClick sono restituiti allì'utente, vengono assorbiti/gestiti solo i touch.
Per lasciare Click e DoubleClick all'utente e allo stesso tempo fare ciò che suggerisce @udg forse sarebbe il caso di usare Touch con unico dito = trascinamento, con due dita = ridimensionamento.
 

LucaMs

Expert
Licensed User
Longtime User
Per lasciare Click e DoubleClick all'utente e allo stesso tempo fare ciò che suggerisce @udg forse sarebbe il caso di usare Touch con unico dito = trascinamento, con due dita = ridimensionamento.
Ma nemmeno, molto più facile:
al Touch verifichi la distanza dai lati; se è entro 10dip significa che l'utente vuole ridimensionare la View su quel lato, altrimenti trascinare (sempre lasciando liberi click e doppio click).
 

Star-Dust

Expert
Licensed User
Longtime User

Star-Dust

Expert
Licensed User
Longtime User
Per lasciare Click e DoubleClick all'utente e allo stesso tempo fare ciò che suggerisce @udg forse sarebbe il caso di usare Touch con unico dito = trascinamento, con due dita = ridimensionamento.
Gestire il multi-touch è più complicato, di solito questo l'ho fatto per le immagini per i pannelli di solito, se non c'è un motivo specifico, non serve
 

Matteo Granatiero

Active Member
Licensed User
Ti ho allegato un esempio. Devi riscaricare la liberia versione B4A che aveva un bugs.
Per muovere un pannello toccare e trascinare l'angolo in alto a sinistra. Per ridimensionare un pannello toccare e trascinare l'angolo in basso a destra

View attachment 103220
testano nuovamente questa funzione, ma anche questo tuo progetto integrale ho notato che durante il trascinamento il pannello “vibra” come se fosse “buggato”. Sapresti dirmi perché?
 

Star-Dust

Expert
Licensed User
Longtime User
È una ragione tecnica che al momento non è possibile togliere.
Man mano che sposto il dito , sposto il pannell5 questo fa perdere di valore le coordinate iniziali da dove calcola la distanza e la direzione dello spostamento, visto che spostando il pannello quel punto potrebbe uscire fuori dall'area del pannello.
Quindi ricibosce un nuovo evento tocco nella nuova posizione, questo causa quel fastidioso sfarfallio
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Ti dirò che nello scrollview per evitare questo difetto non si intercetta il tocco del pannello che scorre ma del pannello sottostante che lo contiene e che non si muove e non vedi mai sfarfallare lo scrollview
 

Matteo Granatiero

Active Member
Licensed User
Ti dirò che nello scrollview per evitare questo difetto non si intercetta il tocco del pannello che scorre ma del pannello sottostante che lo contiene e che non si muove e non vedi mai sfarfallare lo scrollview
perciò una soluzione “rustica” per risolvere questo c’è?
 

Star-Dust

Expert
Licensed User
Longtime User
certo intercettare con il pannello sottostante.
Ma capisci che é complicata, perché devi sapere quale vista muovere sopra ma intercettare il pannello sotto.
Nello scrollview è facile c'è un solo pannello sopra tutto il resto è attaccato al pannello sopra, muovi solo quello

Ci sarà anche una seria ma al momento non la conosco
 
Last edited:

Matteo Granatiero

Active Member
Licensed User
certo intercettare con il pannello sottostante.
Ma capisci che é complicata, perché devi sapere quale vista muovere sopra ma intercettare il pannello sotto.
Nello scrollview è facile c'è un solo pannello sopra tutto il resto è attaccato al pannello sopra, muovi solo quello

Ci sarà anche una seria ma al momento non la conosco
cioè se ho solo 1 panel, e ne aggiungo un altro al suo interno non riuscirò a risolvere? perche credo di non aver capito la questione Scrollview allora
 

Star-Dust

Expert
Licensed User
Longtime User
cioè se ho solo 1 panel, e ne aggiungo un altro al suo interno non riuscirò a risolvere? perche credo di non aver capito la questione Scrollview allora
Non puoi farlo con la mia libreria.

Devi gestire tu il trascinamento senza librerie. Intercettare i movimenti dal pannello che contiene le viste che vuoi muovere. Per ogni trascinamento nel pannello devi identificare quale vista corrisponde e muovere quella
 
Top