Italian button trascinabili

Alex68

Member
Licensed User
Longtime User
Ciao a tutti.
sto realizzando una applicazione dove all'interno di una scrollview sono presenti label e icone. Mi piacerebbe poter spostare orizzontalmente queste view tracinandole con il dito ( per esempio dal lato sinistro dello schermo al destro e vice versa) e una vlta raggiunta la posizione ricevere un valore per indicarne l'avvenuto spostamanto. Sto cercando nei vari forum, anche quelli in inglese ma non sono ancora riuscito a trovare nulla.
qualcuno mi può aiutare ?

ciao
 

Dominex

Active Member
Licensed User
Longtime User
La cosa si può fare tranquillamente, però tutto via codice. Devi utilizzare gli eventi Touch dell'Activity per individuare i View, dopodichè sempre con i Touch li sposti in giro per lo schermo.

Non ci sono funzioni già pronte.
 

Alex68

Member
Licensed User
Longtime User
ciao Dominex

Dato che sono alle prime armi, è possibile avere un esempio di una
scrollview con all'interno una label, così riesco a capire meglio

grazie
 

henry1311

Member
Licensed User
Longtime User
ecco lo zip completo
classe : DraggableView.bas - io uso questa leggermente modificata!

io ho utilizzato il LongClick (sub EventXtouch_LongClick)
long_click... cambia colore e ... te lo sposti!

ciao
enrico
 

Alex68

Member
Licensed User
Longtime User
ciao henry1311

poichè sono alle prime armi, pensavo fosse più semplice. Quello che vorrei ottenere è qualcosa di simile quando devi rispondere ad una chiamata dell' iponhe (scusate l'obrobrio).
Se qualcuno ha qualcosa di più semplice ben venga

ciao
 

Dominex

Active Member
Licensed User
Longtime User
ciao henry1311

poichè sono alle prime armi, pensavo fosse più semplice. Quello che vorrei ottenere è qualcosa di simile quando devi rispondere ad una chiamata dell' iponhe (scusate l'obrobrio).
Se qualcuno ha qualcosa di più semplice ben venga

ciao

Te lo faccio io un esempio, però devo capire bene quello che i serve.
Se ho capito bene vuoi un bottone che possa essere translato orizzontalmente, tipo da sinistra a destra. Una volta mosso, il bottone deve restare fermo oppure deve ritornare nella sua posizione iniziale?
Il bottone devo poter essere premuto, oppure ti basta solo un immagine?
 

henry1311

Member
Licensed User
Longtime User
io non so cosa o come fa l'iphogne! se vuoi qualcosa di simile a quello che fa android quando si 'riattiva' dallo stand-by... dovrebbe andare bene il module che ti ho inviato, salvo limitare la coordinata y e, volendo, la coordinata x fino alla posizione tale da far scatenare l'evento desiderato...
Penso che non devi ragionare sui bottoni, ma su un panel (in cui potresti anche aggiungere altre view), farlo semi-trasparente, mano a mano che si sposta verso destra (per esempio) mantieni sempre 'left' fisso a 0 (la partenza da sinistra) oppure 'right' al margine destro (se deve partire da destra)...
Utilizza il modulo che ti ho inviato, sono poche righe e gestibili.
Ciao
Enrico
 

Alex68

Member
Licensed User
Longtime User
Ciao
per Dominex:
Il bottone o label deve poter essere trascinTo da sx a dx e una volta eaggiunta la posizione deve restare fermo li dov'e'. Ovviamente non deve potersi fermare in posizioni qualsiasi, ma solo a dx o a sx.
Per adesso non ho necessita' che il bottone o label debba essere premuto, ma comunque raggiunta la posizione dx o sx deve poter geerare un evento che io in qualche modo possa leggere(per esempio quando da sx viene trasxinato a dx mi appare una msgbox con"view in posizone ...."). Poi se riesci a farmi anxxhe il caso in cui ilbottone o la lanel sino premutii, la utilizzero' per imparare qulcosa in piu'.

x henry1311
Esattamente quello che fa che fa android quando si 'riattiva' dallo stand-by, ma non applicato all'intera schermata ma singoli bottoni o label presenti alll'interno di una scollview. Per ora sto cercando di studiare il tuo esempio e a capire come funziona, anche perche'fIuso della libreria 'reflector' che devo capire il suo funzionamento.

Grazie a tutti.
Cio
 

Dominex

Active Member
Licensed User
Longtime User
Ti ho fatto l'esempio, richiede però la libreria Animation.
Il Button è una ImageView che puoi usare con le immagini per rappresentare il pulsante che preferisci.

Ciao

B4X:
'Activity module
Sub Process_Globals
End Sub

Sub Globals
   Dim pnlTemp As Panel
   Dim imvTemp As ImageView
   Dim TornaIndietro,FineCorsa As Boolean 'se è True indica che il pulsante sta tornando indietro
   Dim FineCorsa As Boolean 'se è True indica che il pulsante è a fine corsa
   Dim X0,X1 As Int
End Sub

Sub Activity_Create(FirstTime As Boolean)
   '---creaiamo il Panel--
   pnlTemp.Initialize("")
   pnlTemp.Color = Colors.DarkGray
   Activity.AddView(pnlTemp,10%x,70%y,80%x,60dip)
   '---Creaiamo il View che funge da Button---
   imvTemp.Initialize("")
   imvTemp.Color = Colors.Blue
   pnlTemp.AddView(imvTemp,0,0,60dip,60dip)
   '---Creaiamo il Menù Azzera---
   Activity.AddMenuItem("AZZERA","mnuAzzera")
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub Activity_Touch(Action As Int, X As Float, Y As Float)
   If TornaIndietro OR FineCorsa Then Return
   Dim dX,dY As Int
   Select Action
      Case Activity.ACTION_DOWN
           X0 = X-pnlTemp.Left
         X1 = imvTemp.Left
      Case Activity.ACTION_MOVE
         dX = X - X0
         imvTemp.Left = Min(X1+dX,pnlTemp.Width-imvTemp.Width)
       Case Activity.ACTION_UP
          If Abs(X-X0) < 5 Then 'controlla se è stato premuto il pulsante.
            dX = X
            dY = Y-pnlTemp.Top
            If dX>=imvTemp.Left AND dY>=imvTemp.Top AND dX<=imvTemp.Left+imvTemp.Width AND _
               dY<=imvTemp.Top+imvTemp.Height Then
               ToastMessageShow("Hai premuto il pulsante!",False)
            End If
         Else If imvTemp.Left >= (pnlTemp.Width-imvTemp.Width) Then
            FineCorsaRaggiunta
         Else
            Dim a As Animation
            a.InitializeTranslate("TornaIndietro",0,0,-imvTemp.Left,0)
            a.Duration = 500
            a.Start(imvTemp)
            TornaIndietro = True
         End If
    End Select
End Sub

Sub TornaIndietro_AnimationEnd
   imvTemp.Left = 0
   TornaIndietro = False
End Sub

Sub FineCorsaRaggiunta
   FineCorsa = True
   ToastMessageShow("Evento <Finecorsa>",False)
End Sub

Sub mnuAzzera_Click
   imvTemp.Left = 0
   FineCorsa = False
End Sub
 

Attachments

  • Scroll Button.zip
    41.2 KB · Views: 264
Top