ich möchte gerne für meinen Sohn einen digitalen Bilderrahmen machen.
Ich habe auch schon viele gelesen und probiert und das ist bis jetzt dabei raus gekommen.
B4X:
Sub Process_Globals
Dim timer2 As Timer
End Sub
Sub Globals
Dim exRoute As String
Dim List1 As List
Dim FileNumber As Int
Dim FileCount As Int
Dim ImageView1 As ImageView
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("viewtest")
timer2.Initialize("timer2",1000)
timer2.Interval = 5000
timer2.Enabled =False
FileCount =0
List1.Initialize
exRoute = File.DirRootExternal & "/Bilder"
List1 = File.ListFiles (exRoute )
If List1.Size > 0 Then
FileCount = List1.Size
FileNumber =-1
timer2.Enabled = True
End If
End Sub
Sub Activity_Resume
End Sub
Sub timer2_tick
Dim sFile As String
timer2.Enabled =False
FileNumber = FileNumber + 1
If FileNumber +1 > FileCount Then
FileNumber=0
Else
Return
End If
sFile= List1.Get (FileNumber)
DoEvents
ImageView1.Bitmap=LoadBitmap(exRoute,sFile)
End Sub
Geht leider nicht. Die Bilder liegen im Ordner Bilder auf der SD.
Kann mir bitte jemand einen Tipp geben was ich falsch mache.
Du solltest mal Deine timer2_Tick Routine genau analysieren und verstehen was darin vorgeht. Da sind leider etliche Fehler drin.
Aber es ist bestimmt besser wenn Du die selbst herausfindest als dass wir sie Dir zeigen, so was nennt sich dann eben Erfahrung.
Um das zu analysieren kannst Du einen Breakpoint setzen und dann Schritt für Schritt die Routine durchlaufen.
Okay, danke Klaus habe es hin bekommen, das mit dem Breakpoint hat echt geholfen:sign0188:
Hier der Code
B4X:
Sub Process_Globals
Dim timer2 As Timer
End Sub
Sub Globals
Dim exRoute As String
Dim List1 As List
Dim FileNumber As Int
Dim FileCount As Int
Dim ImageView1 As ImageView
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("viewtest")
timer2.Initialize("timer2",5000)
timer2.Enabled =False
FileCount =0
List1.Initialize
exRoute = File.DirRootExternal & "/Bilder"
List1 = File.ListFiles (exRoute )
If List1.Size > 0 Then
FileCount = List1.Size
FileNumber =-1
timer2.Enabled = True
End If
End Sub
Sub timer2_tick
Dim sFile As String
timer2.Enabled =False
FileNumber = FileNumber + 1
If FileNumber +1 > FileCount Then
FileNumber=0
End If
sFile= List1.Get (FileNumber)
DoEvents
ImageView1.Bitmap=LoadBitmap(exRoute,sFile)
timer2.Enabled = True
End Sub
Zwei kleine Fragen hätte ich aber noch.
1. Wie kann ich es anstellen das nur jpg Datein geladen werden (falls mal andere Datein im Ordner liegen sollen)?
2. Wie kann ich es anstellen das der Code alle (z.Bsp.) 2 Stunden überprüft ob neue Datein im Ordner liegen und diese dann abspielt?
hierzu habe ich Dir bereits einen Code gepostet. Dieser liest nur die in einem
Ordner befindlichen MP3-Dateien ein. Es sollte für Dich ein leichtes sein, ihn
entsprechend anzupassen.
Ich schlage Dir vor die timer2_Click Routine folgendermassen zu ändern:
B4X:
Sub timer2_tick
Dim sFile As String
FileNumber = FileNumber + 1
If FileNumber +1 > FileCount Then
FileNumber=0
End If
sFile= List1.Get (FileNumber)
ImageView1.Bitmap=LoadBitmap(exRoute,sFile)
End Sub
Das Thema ist zwar schon eine Weile her, aber da ich mich erst seit kurzem mit dem Programm beschäftige hätte ich zu diesem Programm noch eine kleine Frage.
Leider habe ich im gesamten Forum nichts gefunden.
Wie kann ich denn im lokalen Netzwerk auf einen Bilderordner vom NAS zugreifen ? (Synology DS212j als Beispiel)
Hi !
SMB habe ich jetzt auch gefunden und mal getestet.
Das funktioniert auch soweit, sprich die Dateien kann ich zählen, Ordner auslesen etc.
Was ich in dieser Lib nicht gefunden habe ist so etwas wie in dem Beispiel Dateien direkt bzw. in beliebiger Reihenfolge zu laden (also per RND Filenumber)
Trotzdem Dank !
Hallo nochmals,
habe die Routine von oben (mit und ohne Anpassung von 'klaus') mal eine weile laufen lassen.
Nach einigen Minuten folgt die Fehlermeldung:
java.io.FileNotFoundException: /mnt/storage/Pictures/cache: open failed: EISDIR (Is a directory)
Dann musst Du testen ob der Dateiname ein Ordner ist.
Hast Du den Ordner vom ersten Post geändet, es war exRoute = File.DirRootExternal & "/Bilder"?
Wenn JA ersetze exRoute durch den Ordnernamen.
B4X:
If File.IsDirectory(exRoute, sFile) = False Then
ImageView1.Bitmap=LoadBitmap(exRoute,sFile)
End If
Ja. das listFILES ist vielleicht etws nglücklich... es ist eigentlich ein ListDIR... Es werden alle Ordner und Dateien in dem Pfad gelistet. Auch "." und ".."
Rückmeldung: es funktioniert, Danke für die Unterstützung !!!!
Ja, leider sehr "unglücklich" das ListFiles, deswegen bin ich da erstmal auch nicht drauf gekommen.
Ein mitlaufendes LOG gab auch keinen Hinweis darauf, aber wie schon Anfangs bemerkt, stecke ich auch noch absolut in den Anfängen und Probiere hier und da etwas rum.