Download the free trial version
Basic4android Video
Features
Tutorials and manuals
Showcase
Screenshots

Go Back   Android Development Forum - Basic4android > Foreign Languages > German Forum
Documentation Wiki Register Members List B4P Search Today's Posts Mark Forums Read

Activity_touch Puffer löschen

Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 02-02-2012, 09:30 PM
Junior Member
 
Join Date: Jan 2012
Posts: 26
Default Activity_touch Puffer löschen

Hallo,

stehe vor folgenden Problemund finde die Lösung nicht.

Es wird eine Grafik auf einem Canvas gezeichnet, welche am Ende auch mit dem Finger verschoben werden kann.
Damit dies nicht während des Zeichnes geschehen kann, frage ich in der "activity_touch" über eine Variabel ab, ob gerade die Grafikausgabe stattfindet.
Falls ja, wird die Subroutine direkt wieder verlassen und gut ist.
Aber, die ganzen Gesten werden sich wohl in einem Puffer gemerkt und so passiert es, das nach Fertigstellung der Grafikausgabe diese alle abgearbeitet werden.
Folge, die Grafik spring hin und her.

Ich suche nun eine Möglichkeit, diesen Puffer zu löschen, bzw. es irgendwie anders hin zu bekommen.

Gruß
Sky

Edit:
In der Loop, welche die Grafik auf dem Canvas ausgibt, befindet sich ein "Invalidate" und ein "DoEvents".
Ansonsten wird mir die Grafik erst nach Ablauf der Loop angezeigt.
Ich denke hier liegt das Problem, aber anders bekomme ich momentan kein Update des Bildschirms hin.

Last edited by Skywalker : 02-02-2012 at 10:17 PM.
Reply With Quote
  #2 (permalink)  
Old 02-03-2012, 06:55 AM
klaus's Avatar
Basic4ppc Expert
 
Join Date: Oct 2007
Location: Fully, Switzerland
Posts: 4,463
Awards Showcase
Forum Contributer Beta Tester Competition Winner 
Total Awards: 3
Default

Könntest Du Deinen Code hier als zip Datei posten?
Es wäre viel einfacher zu helfen.

Beste Grüsse.
__________________
Klaus
Switzerland

Beginner's Guide / User's Guide
Reply With Quote
  #3 (permalink)  
Old 02-03-2012, 12:46 PM
Junior Member
 
Join Date: Jan 2012
Posts: 26
Default

Code Posten ist jetzt etwas schwierig, bin auf der Arbeit.
Grafik wird aber mit Canvas auf einem Panel ausgegeben.
Das sieht in etwa so aus.

Sub Activity_Resume()
...
Berechnung_Aktiv = True
For i = 0 to irgendwas
.. Jede Menge Berechnungen
Canvas1.DrawLine(x,y,...usw.)
Panel1.Invalidate
DoEvents
next i
Berechnungen_Aktiv = false
End Sub

Sub Activity_Touch(x,y,Action...usw)
If Berechnungen_Aktiv = True then Return True
Select Action
...
EndSelect
Return True
End Sub

Während der Berechnung und Grafikausgabe soll also kein Touch abgearbeitet werden, das funktioniert auch. Aber alle Touch-Events werden nach der Grafikausgabe abgearbeitet. Das soll aber nicht sein.
Denke es liegt an DoEvents. Lass ich das aber weg, wird die Grafik erst nach Fertigstellung angezeigt. Genauso ist es mit dem Panel1.Invalidate.
Habe es dann ohne DoEvents probiert und anstelle dessen ein Panel1.Invalidate(Rect) eingefügt, aber auch dann wird die Grafik erst nach Ablauf der For-Schleife angezeigt.
Reply With Quote
  #4 (permalink)  
Old 02-03-2012, 02:30 PM
klaus's Avatar
Basic4ppc Expert
 
Join Date: Oct 2007
Location: Fully, Switzerland
Posts: 4,463
Awards Showcase
Forum Contributer Beta Tester Competition Winner 
Total Awards: 3
Default

Zuerst schon mal, diese Zeile:
Code:
Next i
muss so aussehen:
Code:
Next
Die Incrementvariable darf nicht hinter Next stehen.

Um heauszufinden wo das Problem liegt schlage ich Dir vor eine globale Variable j zu erstellen und diese in der Schleife gleich i zu setzen.
In der Touch Routine setze zwei Log rein. Dann kannst Du sehen was in der Touch Routine passiert.
Code:
Sub Activity_Touch(Action As Int, X As Float, Y As Float)
  
Log("" & j)
  
If Berechnungen_Aktiv = True Then Return
  
Log("" & j)  
  
Select Action
   ...
  EndSelect
End Sub
Die Activity_Touch Routine braucht keine boolsche Variable nach Return nur Panel_Touch Routinen braucht sie.

Beste Grüsse.
__________________
Klaus
Switzerland

Beginner's Guide / User's Guide

Last edited by klaus : 02-03-2012 at 02:35 PM.
Reply With Quote
  #5 (permalink)  
Old 02-03-2012, 08:43 PM
Junior Member
 
Join Date: Jan 2012
Posts: 26
Default

Danke Klaus.
Das mit dem "Next" ist mir bekannt. Hatte heute das Code-Beispiel aus dem Kopf heraus geschrieben.
Dein Vorschlag mit den Variabeln hilft mir nicht weiter. Was in der Touch-Routine passiert ist mir schon klar. Daran liegt es nicht.

Wie schon geschrieben, solange die Schleife mit der Grafikausgabe beschäftigt ist, wird jede Fingergeste in der Touch-Routine ignoriert,
durch "If Berechnungen_Aktiv = True then Return". Das ist ja auch so gewollt.

Nur, sobald die Schleife durch ist und die Grafik somit fertig, werden alle Gesten ,die während der Grafikausgabe getätigt wurden, abgearbeitet.
Also sind die Gesten irgendwie gepuffert worden. Das soll aber so nicht sein.
Reply With Quote
  #6 (permalink)  
Old 02-03-2012, 08:58 PM
klaus's Avatar
Basic4ppc Expert
 
Join Date: Oct 2007
Location: Fully, Switzerland
Posts: 4,463
Awards Showcase
Forum Contributer Beta Tester Competition Winner 
Total Awards: 3
Default

Quote:
Dein Vorschlag mit den Variabeln hilft mir nicht weiter. Was in der Touch-Routine passiert ist mir schon klar. Daran liegt es nicht.

Wie schon geschrieben, solange die Schleife mit der Grafikausgabe beschäftigt ist,
Bist Du sicher ? Hast Du es ausprobiert ob die Touch Routine aufgerufen wird wenn die Schlaufe durchlaufen wird ? Das wollte Ich mit den Log Schlüsselworten ausprobieren.
Es kommt mir komisch vor dass die Routine aufgerufen wird und nachher noch einmal. Ich vermute nàhmlich dass die Routine nicht aufgerufen wird so lange das Programm in der Schlaufe ist, und die Touch-Events in einer Warteschlange bleiben.
Ohne den Code kann Ich da leider nicht weiter suchen.

Beste Grüsse.
__________________
Klaus
Switzerland

Beginner's Guide / User's Guide
Reply With Quote
  #7 (permalink)  
Old 02-03-2012, 09:30 PM
Junior Member
 
Join Date: Jan 2012
Posts: 26
Default

Während der Schleife wird die Touch_Routine nicht abgearbeitet. Höchstens einmal am Anfang. Habe das mit der Variabel getestet.
Erst wenn die Schleife durch ist, wird der Puffer (Warteschlange) abgearbeitet.

Das bedeutet natürlich, das ich während des Schleifendurchlaufes in der Touch_Routine den Puffer nicht löschen könnte. Weil da ja noch nichts abgefragt wird.
Wie kann ich diese Warteschlange nun umgehen?
Reply With Quote
  #8 (permalink)  
Old 02-04-2012, 08:44 AM
klaus's Avatar
Basic4ppc Expert
 
Join Date: Oct 2007
Location: Fully, Switzerland
Posts: 4,463
Awards Showcase
Forum Contributer Beta Tester Competition Winner 
Total Awards: 3
Default

Eigentlich müsste DoEvents die Touch Routine aufrufen lassen.

Versuche es mal mit einem Timer:
- Am Ende der Schlaufe setze einen Timer1.Enabled = True

- In der Timer1_Tick Routine
- Timer1.Enabled = False
- Berechnungen_Aktiv = False

Während der Timerzeitspanne werden die Touchevents aufgerufen,
aber da die Berechnungen_Aktiv Variable immer noch False ist wird nichts durchgeführt.
Die Länge der Zeitspanne des Timers musst Du ausprobieren.

Ist bestimmt nicht die eleganteste Lösung sollte aber funktionieren, habe es nicht ausprobiert.

Beste Grüsse.
__________________
Klaus
Switzerland

Beginner's Guide / User's Guide

Last edited by klaus : 02-04-2012 at 08:48 AM.
Reply With Quote
  #9 (permalink)  
Old 02-04-2012, 11:05 AM
Junior Member
 
Join Date: Jan 2012
Posts: 26
Default

Habe das mit dem Timer ausprobiert. Leider bleibt alles beim alten.

[EDIT]
Habe den Timer wieder raus genommen und festgestellt, das manchmal wohl doch die Touch-Routine aufgerufen wird.

Last edited by Skywalker : 02-04-2012 at 11:45 AM.
Reply With Quote
  #10 (permalink)  
Old 02-04-2012, 12:07 PM
klaus's Avatar
Basic4ppc Expert
 
Join Date: Oct 2007
Location: Fully, Switzerland
Posts: 4,463
Awards Showcase
Forum Contributer Beta Tester Competition Winner 
Total Awards: 3
Default

Wie schon geschrieben, ohne dem Code ist schwer konkret zu helfen.

Beste Grüsse.
__________________
Klaus
Switzerland

Beginner's Guide / User's Guide
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are On

Similar Threads
Thread Thread Starter Forum Replies Last Post
Multiple objects with activity_touch bazp Basic4android Updates and Questions 4 01-05-2012 07:19 PM
Tabelle aus bestehender Datenbank löschen Amalkotey German Forum 2 05-28-2010 07:36 AM
Dateien löschen Andrej.Malysev German Forum 2 03-23-2009 08:17 AM
Auslesen einer Tabelle in eine Textbox und löschen von "0,00-Ergebnissen" JOTHA German Forum 8 11-29-2008 08:50 AM
Neuer Kontakt wie wieder löschen ? Paulsche German Forum 4 10-21-2008 04:43 PM


All times are GMT. The time now is 07:04 PM.


Powered by vBulletin® Version 3.6.12
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0