Italian (RISOLTO) Custom Seekbar

Traiser

Member
Licensed User
Longtime User
Allora utilizzando questa libreria mi è sorto un piccolo dubbio/problemino...
Con queste seekbar come mai non si vede lo scatto che fa quando salta da un valore all'altro?
Cerco di spiegarmi meglio, mettiamo per esempio di impostate un valore .Max di 20 a questa seekbar, in quelle tradizionali quando le trascino con il dito, l'effetto visivo e quello che ad ogni valore dello scorrimento il cursore fa una piccola pausa da un valore a l'altro, in quelle custom il cursore invece va liscio come l'olio...
Come fare per poter rendere le custom seekbar come quelle di default di android? cioè comprensivo del piccolo scatto?
 

anallie0

Active Member
Licensed User
Longtime User
molto probabilmente non è contemplato nella libreria.
Potresti eventualmente usare un timer e utilizzarlo per fargli fare degli step.
 

Traiser

Member
Licensed User
Longtime User
Grazie per la risposta, in effetti potrebbe essere un idea per risolvere il problema.
Vorrei vedere solo se si può risolvere in altra maniera, diciamo meno rudimentale, usando magari la libreria Reflector o JavaObject evitando cosi di mettere timer nelle seekbar e utilizzare qualche istruzione nativa di android :)
 

LucaMs

Expert
Licensed User
Longtime User
Uhm, quella è una classe, quindi puoi modificarla.

Trovare il sistema però è difficile, perché mentre l'utente trascina non so quali eventi possano scatenarsi.

Forse protresti provare, mentre l'utente scorre la Seekbar... a fargli il solletico :D

(scusa, non ho resistito:rolleyes:)
 

LucaMs

Expert
Licensed User
Longtime User
Provo a farmi perdonare per la battutina.

Ho inserito qualche riga in quella classe, che poi tu modificherai meglio.

Dopo la riga 149 : mbLabel.text = returnValue
B4X:
If returnValue Mod 10 = 0 Then
   Sleep(100)
End If

Poi ho aggiunto in fondo questa routine trovata nel sito:
B4X:
Private Sub Sleep(ms As Long)
Dim now As Long
  If ms > 1000 Then ms =1000  'avoid application not responding error
  now=DateTime.now
  Do Until (DateTime.now>now+ms)
    DoEvents
  Loop
End Sub
 

Traiser

Member
Licensed User
Longtime User
ma lol xD si è una classe non una libreria.. cmq ho provato il codice e non mi funziona, la seekbar impazzisce domani con calma provo meglio tnx
 
Last edited:

Traiser

Member
Licensed User
Longtime User
LucaMs prova a impostare come MaxValue della seekbar 15, vedrai che l'effetto non funge :)

UPDATE:
impostando
B4X:
If returnValue = returnValue - 1 Then
      Sleep(100)
End If
e stepValue = 1
Cosi mi funziona anche se l'effetto si nota solo quando si lascia il dito e non come nelle seekbar originale che lo fa anche durante il trascinamento.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
LucaMs prova a impostare come MaxValue della seekbar 15, vedrai che l'effetto non funge :)

UPDATE:
impostando
B4X:
If returnValue = returnValue - 1 Then
      Sleep(100)
End If
e stepValue = 1
Cosi mi funziona anche se l'effetto si nota solo quando si lascia il dito e non come nelle seekbar originale che lo fa anche durante il trascinamento.


Adesso non posso provare ma il punto dovrebbe essere che io ho messo:
B4X:
If returnValue Mod 10 = 0 Then
  Sleep(100)
End If

Quel 10 fisso andrebbe cambiato con una variabile proporzionata al MaxValue, cioè quando impostano MaxValue quel 10 potrebbe essere ad esempio
StepValue = MaxValue / 10 e poi
B4X:
If returnValue Mod StepValue = 0 Then
  Sleep(100)
End If
 

Traiser

Member
Licensed User
Longtime User
ho fatto altri test e il risultato migliore lo trovo solo utilizzando questo codice
B4X:
If returnValue = returnValue - 1 Then
      Sleep(100)
End If
il problema è che lo scatto si verifica solo quando il puntatore della seekbar viene rilasciato, non quando viene mosso (cioè il modalità pressed)
credo che si debba agire su valore X del mbBtn.Left ma non ci riesco >.<
 

Traiser

Member
Licensed User
Longtime User
Allora ho constatato che in realtà il codice che avevo postato prima in realtà non faceva nulla.
Ho risolto con questo codice:
B4X:
Sub SBT_Click(returnValue)
    SBT1.Value = returnValue  'questo codice qui
    Activity.Title = "Value is " & returnValue  
End Sub
La soluzione era più semplice di quanto immaginavo :)

Comunque Grazie a tutti per l'aiuto ^^
 
Last edited:
Top