Italian Componente tipo odometro

udg

Expert
Licensed User
Longtime User
Ciao a tutti,

l'oggetto non è chiarissimo ma non sapevo come esprimere ciò che cercavo..scusate.
Sto imparando ad usare B4A e l'app di oggi prevede un bel conto alla rovescia rispetto ad una data prefissata (es. data inaugurale prossimi Giochi Olimpici).

La parte funzionale sembra ok, ma la grafica per ora è pietosa (ed è ancora un eufemismo).
Mi chiedevo se qualcuno ha già sviluppato qualcosa come quello che si vede al seguente indirizzo
http://www.smashingapps.com/2012/12/04/16-cool-countdown-timer-scripts-for-your-projects.html
o se mi tocca costruire tutto da zero (va bene, non è difficile, ma se esiste già..).

Grazie per l'aiuto

Umberto
 

ivanomonti

Expert
Licensed User
Longtime User
Puoi farlo con la mia TollsBar inserendo solo 3 elementi e un timer :)

554181_596496760414434_163195220_n.jpg


B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals

End Sub

Sub Globals
    Dim imt As ClassMyToolBar
    Dim btn(3) As Button
    Dim col(2) As Int
    Dim ti As Timer
    Dim btm1,btm2,btm3 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
   
    btm1.Initialize("Event")
    btm1.Text = "00"
    btm1.TextColor = Colors.Red
    btm1.TextSize = 22dip
    btm1.Typeface = Typeface.DEFAULT_BOLD
    btn(0) = btm1
       
    btm2.Initialize("Event")
    btm2.Text = "00"
    btm2.TextColor = Colors.Green
    btm2.TextSize = 22dip
    btm2.Typeface = Typeface.DEFAULT_BOLD
    btn(1) = btm2
       
    btm3.Initialize("Event")
    btm3.Text = "00"
    btm3.TextColor = Colors.blue
    btm3.TextSize = 22dip
    btm3.Typeface = Typeface.DEFAULT_BOLD
    btn(2) = btm3
   
    col(0) = Colors.ARGB(255,30,30,30)
    col(1) = Colors.ARGB(255,224,180,13)
   
    imt.Initialize(Activity,1,btn,90dip,90dip,col)
   
    ti.Initialize("ti",1000)
    ti.Enabled = True
   
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub ti_tick
    btm1.Text = DateTime.GetHour(DateTime.Now)
    btm2.Text = DateTime.GetMinute(DateTime.Now)
    btm3.Text = DateTime.GetSecond(DateTime.Now)
End Sub
 
Last edited:

djveleno

Active Member
Licensed User
Longtime User
Puoi farlo con la mia TollsBar inserendo solo 3 elementi e un timer :)

View attachment 20139

B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals

End Sub

Sub Globals
    Dim imt As ClassMyToolBar
    Dim btn(3) As Button
    Dim col(2) As Int
    Dim ti As Timer
    Dim btm1,btm2,btm3 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
  
    btm1.Initialize("Event")
    btm1.Text = "00"
    btm1.TextColor = Colors.Red
    btm1.TextSize = 22dip
    btm1.Typeface = Typeface.DEFAULT_BOLD
    btn(0) = btm1
      
    btm2.Initialize("Event")
    btm2.Text = "00"
    btm2.TextColor = Colors.Green
    btm2.TextSize = 22dip
    btm2.Typeface = Typeface.DEFAULT_BOLD
    btn(1) = btm2
      
    btm3.Initialize("Event")
    btm3.Text = "00"
    btm3.TextColor = Colors.blue
    btm3.TextSize = 22dip
    btm3.Typeface = Typeface.DEFAULT_BOLD
    btn(2) = btm3
  
    col(0) = Colors.ARGB(255,30,30,30)
    col(1) = Colors.ARGB(255,224,180,13)
  
    imt.Initialize(Activity,1,btn,90dip,90dip,col)
  
    ti.Initialize("ti",1000)
    ti.Enabled = True
  
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub ti_tick
    btm1.Text = DateTime.GetHour(DateTime.Now)
    btm2.Text = DateTime.GetMinute(DateTime.Now)
    btm3.Text = DateTime.GetSecond(DateTime.Now)
End Sub
Ciao Ivano, bello sì, ma così esegui un orologio, credo che la domanda fosse diretta più ad un countdown, dato che non conosco a fondo la tua libreria, se volessi creare un countdown che da un orario fissato vada a 0? Ad esempio, stavo lavorando ad un progettino semplice, un timer da cucina, facile no? Ed invece non è proprio così semplice, eseguire un clock è facile, farlo la contrario un pò meno, con la tua Class è possibile?
Ciao Dj
 

ivanomonti

Expert
Licensed User
Longtime User
la mia classe e solo come rappresentare un certo dato con aspetto più grazioso, poi il motore che crea i dati altro discorso... poi per fare un conto alla rovescia non e così complesso una variabile count con data fissa e una con data aggiornata... data aggiornata - data fissa ti dice il tempo passato, ma se metti valori inversi ti dice quanto manca

Poi usi la mia classe o le mie classi per dargli tocco di colore o aspetto grafico.
 

udg

Expert
Licensed User
Longtime User
Ringrazio entrambi per i commenti ed i suggerimenti proposti.
Oggi ero in viaggio e finora non ho potuto testare nulla, ma lo farò al più presto.

Intanto se può essere utile a qualcuno, posto di seguito la soluzione al countdown che ho elaborato e che è indipendente dal fuso orario dell'utente dell'app. Se sbaglio qualcosa, ditemelo !

Sub Globals
DateTime.SetTimeZone(0) 'fa in modo che ogni riferimento successivo sia a UTC/GMT 0 (ovvero Greenwich)
'L'orario locale reale dell'evento dovrebbe essere 16:50 (orario di Rome, UTC+2 alla data dell'evento) ma viene scritto come 14:50 (UTC/GMT 0)
Dim EventDate As Long = DateUtils.SetDateAndTime(2013,10,25,14,50,0) ' Data ed ora dell'evento, riportati come UTC 0
Dim lblCountDown As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout1")
dt_now= DateTime.now 'Now riporta data/ora attuale come se l'utente app si trovi su UTC 0
'calcola quanto resta prima dell'inizio dell'evento (e quindi countdown a zero); entrambi gli argomenti sono UTC 0 quindi a differenza è ok
Dim CountDown As Period = DateUtils.PeriodBetween(EventDate, dt_now)
lblCountDown.Text = CountDown.Years & CountDown.Months & CountDown.Days & CountDown.Hours & CountDown.Minutes & CountDown.Seconds
Timer1.Initialize("Timer1", 1000) ' 1000 = 1 second
Timer1.Enabled = True
End Sub

Grazie ancora

Umberto
 
Top