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
  #11 (permalink)  
Old 02-04-2012, 12:54 PM
Junior Member
 
Join Date: Jan 2012
Posts: 26
Post

Glaube, ich ich komme der Ursache näher.

Innerhalb der Berechnungsroutine gibt es zwei For-Schleifen.
Die mittlere dauert länger und es werden keine Events abgearbeitet.

Also sieht in etwas so aus:
Code:
Sub Activity_Resume()
 Berechnung_Aktiv = 
True
 
For i = 0 to irgendwas
   ...ein paar Berechnungen
      
For ii = 0 to irgendwas2
         .. Jede Menge Berechnungen
         Canvas1.DrawLine(x,y,...usw.)
      
next  
   Panel1.Invalidate
   
DoEvents
 
next i
Berechnungen_Aktiv = 
false
End Sub
Setze ich jetzt Invalidate und DoEvents ans Ende der mittleren Schleife, werden die Touch-Events wohl eher abgearbeitet.
Code:
Sub Activity_Resume()
 Berechnung_Aktiv = 
True
 
For i = 0 to irgendwas
   ...ein paar Berechnungen
      
For ii = 0 to irgendwas2
         .. Jede Menge Berechnungen
         Canvas1.DrawLine(x,y,...usw.)
         Panel1.Invalidate
         
DoEvents
      
next  
 
next i
Berechnungen_Aktiv = 
false
End Sub
Problem ist nur, das die Berechnung der Grafik dann extrem lange dauert.
Reply With Quote
  #12 (permalink)  
Old 02-04-2012, 01:27 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

Ja, die zweite Schlaufe war in Deinem Beispielcode nicht dabei.
Um die Berechnung zu beschleunigen schlage Ich Dir folgenden Kompromiss vor.
Code:
Sub Activity_Resume
    
Dim i, ii As Int
    
    Berechnung_Aktiv = 
True
    
For i = 0 To irgendwas
        
'...ein paar Berechnungen
        For ii = 0 To irgendwas2
            
'.. Jede Menge Berechnungen
            Canvas1.DrawLine(x,y,...usw.)
            
DoEvents
        
Next  
        Panel1.Invalidate
    
Next
    Berechnung_Aktiv = 
False
End Sub
Beste Grüsse.
__________________
Klaus
Switzerland

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

Danke, das hatte ich auch versucht.
Die Berechnung dauert dann aber immer noch 50% länger als normal und die Gesten
werden zum Teil trotzdem erst am Ende abgearbeitet.

Hat alles keinen Sinn. Ich brauche eine Lösung um die Warteschlange zu löschen oder Abzuarbeiten ohne das die Berechnung neu startet.
Es ist wohl so, das der Puffer erst komplett nach Ende der "Sub Activity_Resume" abgearbeitet wird.
Denn ich habe z.B. folgendes versucht, aber die Warteschlange wird nicht gelöscht.
Code:
Sub Activity_Resume
    
Dim i, ii As Int
    
    Berechnung_Aktiv = 
True
    
For i = 0 To irgendwas
        
'...ein paar Berechnungen
        For ii = 0 To irgendwas2
            
'.. Jede Menge Berechnungen
            Canvas1.DrawLine(x,y,...usw.)
        
Next  
      Panel1.Invalidate
      
DoEvents
    
Next

    
For a = 0 to 50   '<=
     DoEvents          '<=
    Next                 '<=
    Berechnung_Aktiv = False
End Sub
Reply With Quote
  #14 (permalink)  
Old 02-04-2012, 03:46 PM
Knows the basics
 
Join Date: Nov 2011
Location: Im Paradies
Posts: 83
Default

Also wenn ich's richtig verstanden hab' malst du auf ein Panel via eine Leinwand (Canvas) und nur die erste / letzteVerschieberei soll anhand eines Touch Events stattfinden, richtig?

Warum fragst du dann nicht den Panel Touch Event statt Activity Touch Event?
Du könntest das Panel während der Rechnerei verstecken, verkleineren, deaktvieren, was anderes darüber legen oä, so dass gar keine neuen Touch Ereignisse ausgelöst werden.

Actitiy Touch Events werden vom OS in einer Queue behandelt, dann ran zu kommen ist wohl extrem schwer.
__________________
Bad english? Good kharma :-)
Reply With Quote
  #15 (permalink)  
Old 02-04-2012, 06:08 PM
Junior Member
 
Join Date: Jan 2012
Posts: 26
Default

Habe die Touch_Routine etwas geändert und dann funktioniert es einwandfrei im Emulator, aber nicht am Gerät.

@Roeschti

Im eigentlichem Programm frage ich schon das Panel Touch Event ab.
Die Idee mit dem Deaktivieren des Panels1 ist aber super.
Auch das funktioniert im Emulator bestens, aber nicht am Gerät.
Sobald die Berechnungsroutine beendet ist, arbeitet das Gerät die Warteschlange trotzdem ab.
Am Emulator passiert nichts.

Das ist doch nicht normal.
Reply With Quote
  #16 (permalink)  
Old 02-04-2012, 07:25 PM
Junior Member
 
Join Date: Jan 2012
Posts: 26
Default

So Leute ich habe euch mal ein Beispiel gebastelt.
Es ist nicht das eigentliche Programm um das es geht, aber hier passiert genau das gleiche.

Es werden einige Kreise auf einem Canvas gezeichnet, Das Panel ist während dieser Zeit deaktiviert.
Folgendes nun bitte ausprobieren
- Nach dem Start über den Bildschirm Wischen. Es sollte nichts passieren, die Grafik wird fertig gezeichnet und das Programm bleibt stehen. Gut!

- Steht unten "Fertig", dann nach links oder rechts wischen und die Grafik wird neu gezeichnet. Auch gut

- Dann während der Grafikausgabe mehrmals einige Gesten ausführen. Diese werden dann plötzlich nacheinander abgearbeitet. Das ist schlecht, denn das soll nicht so sein.

- Ganz merkwürdig ist, wenn man auf "Reset" klick, werden die Gesten nicht aus dem Puffer abgespielt.
Attached Files
File Type: zip CanvasTest.zip (2.0 KB, 3 views)

Last edited by Skywalker : 02-05-2012 at 07:37 PM.
Reply With Quote
  #17 (permalink)  
Old 02-05-2012, 05:48 AM
Knows the basics
 
Join Date: Nov 2011
Location: Im Paradies
Posts: 83
Default

Nee, funktioniert wie es soll, auf'm Emulator wie auf dem Gerät. Es wird immer nur eine Geste ausgeführt, egal ob ich während dem Zeichnen rumfummle oder nicht, sie werden bei mir weder gepuffert noch sonst was.

Ich kann zB von links nach rechts wischen, dann werden einfafch EINMAL die Kreise neu gezeichnet, sonst passiert da nix, egal was man während dem zeichnen für Gesten macht.

Probiert mit Aldi Lifetab Android 3.2 (nicht gerootet)
__________________
Bad english? Good kharma :-)
Reply With Quote
  #18 (permalink)  
Old 02-05-2012, 01:33 PM
Junior Member
 
Join Date: Jan 2012
Posts: 26
Default

Also das kann eigentlich nicht sein.
Ich habe mir nun auch den Emulator für Android 3.2 installiert und auch dort werden die Gesten gepuffert.
Wenn ich nach dem Aufbau des ersten Bildes z.B. 3x nach rechts wische, werden die Kreis auch 3x hintereinander neu dargestellt.
Nur wenn man auf "Reset" drückt, passiert das nicht.
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:03 PM.


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