Italian Sincronizzare 2 ScrollView

Savy

Member
Licensed User
Salve,
Ho cercato diverse volte nel forum una soluzione senza successo,
e chiedo un vostro aiuto.
In pratica quando eseguo lo scorrimento in verticale del pannello di destra,
la ScrollView di sinistra è sincronizzata correttamente invece se eseguo lo scorrimento in verticale dal pannello di sinistra quello di destra non lo segue.

Vorrei che entrambi fossero sincronizzati.

Sto utilizzando l’esempio di Klaus in GPSExample.

Credo si debba intervenire su questa parte di codice
ma non so come:

B4X:
Sub scvGPSPath1_ScrollChanged(PosX As Int, PosY As Int)
    scvGPSPath0.ScrollPosition = PosY
    pnlGPSPathHeader1.Left = CellWidth0 - PosX
End Sub

Allego codice di esempio.
Grazie!
 

Attachments

  • DemoScrollView.zip
    12.6 KB · Views: 255
Last edited:

LucaMs

Expert
Licensed User
Longtime User
E' piuttosto complicato. Dovresti duplicare quella routine, invertendo i nomi delle due ScrollView (una delle due è una ScrollView2D, quindi i prefissi dei nomi andrebbero cambiati; in realtà proprio i nomi non sono granché) e togliendo la riga riguardante il panel.

Ma questo non basterebbe, perché ci sarebbe una sorta di ridondanza; tu inizi lo scrolling della 0, scatta l'evento Changed della 1 che esegue lo scrolling della 0.

Dovresti aggiungere delle variabili booleane a livello di modulo (globals) che indichino se lo scrolling stia avvenendo per l'intervento manuale dell'utente o perché avviato da una sub xxx_Change. Ma quando dovresti impostare queste variabili?

Dovresti aggiungere un touch listener ad entrambe le ScrollView, usando la Reflection (aggiungere il listener al pannello interno delle ScrollView) ed impostare i valori delle due variabili nelle routine evento touch.
 

LucaMs

Expert
Licensed User
Longtime User
Non andrebbe bene nemmeno come scritto sopra, per due motivi:

1) se aggiungi un touch listener su un pannello interno di una ScrollView, questo non viene intercettato se tocchi una view contenuta nel pannello, ovviamente; sarebbe necessario sovrapporre un pannello trasparente su quello interno, delle stesse dimensioni ed anche questo sarebbe un problema...
2) dovresti intercettare anche il momento del rilascio (quando stacchi il dito, "abbandoni" lo scrolling manuale)

Insomma, molto complicato.
 

Savy

Member
Licensed User
Grazie per il tuo intervento LucaMs!
Spero ci sia una soluzione magari cambiando view...
 
Top