Tobias M.
- Forum-Beiträge: 9
24.05.2010, 16:03:43 via Website
24.05.2010 16:03:43 via Website
Hallo zusammen,
ich habe mir vor ein paar Tagen das HTC Desire zugelegt und wollte nun eine kleine App schreiben. Mit Java bin ich sehr wohl vertraut und die Android spezifischen Sachen gehen dank guter Doku auch recht schnell von der Hand. Allerdings hab ich jetzt ein Problem für welches ich online keine Lösung gefunden habe und vielleicht kann mir hier jemand helfen. Zumindest bin ich hier in den letzten Tagen öfter fündig geworden :-) Ich hoffe Ihr könnt noch einen weiteren Entwickler in Eurer Community gebrauchen.
Nun aber zu meinem Problem. Ich wollte den OnTouchListener benutzen um bestimme Aktionen bei MotionEvent.ACTION_DOWN und MotionEvent.ACTION_UP auszulösen. Dabei ist mir aufgefallen das MotionEvent.ACTION_UP häufiger kommt als ich es angenommen hatte.
Hier etwas code um zu zeigen was ich meine:
Wie ihr seht habe ich die Aktionen mal auskommentiert und statt dessen ein paar Log-Meldungen ausgegeben. Außerdem hab ich noch weiter MotionEvents gefangen um das Verhalten zu untersuchen.
Klicke ich jetzt einmal auf diesen Button und halte die Taste gedrückt so kommen folgende Log-Meldungen:
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_DOWN
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_UP
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_OUTSIDE
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_CANCEL
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_MOVE
Sobald ich die Maustaste (oder Finger auf dem HTC Desire) wieder los lasse kommt folgendes:
05-24 13:56:19.833: DEBUG/BoardScreen(3805): ACTION_UP
05-24 13:56:19.833: DEBUG/BoardScreen(3805): ACTION_OUTSIDE
05-24 13:56:19.833: DEBUG/BoardScreen(3805): ACTION_CANCEL
05-24 13:56:19.833: DEBUG/BoardScreen(3805): ACTION_MOVE
Ich hatte also die Maus/Finger für 4 Sekunden auf dem Bildschirm. Aber warum bekomme ich beim einfachen Anklicken (inklusive gedrückt halten) folgende Events? ACTION_UP, ACTION_OUTSIDE, ACTION_CANCEL, ACTION_MOVE?
Es trifft doch nichts davon zu..
Ich hoffe sehr das mir jemand helfen kann und bedanke mich jetzt schon mal für jede Beteiligung.
Gruß,
Tobias
ich habe mir vor ein paar Tagen das HTC Desire zugelegt und wollte nun eine kleine App schreiben. Mit Java bin ich sehr wohl vertraut und die Android spezifischen Sachen gehen dank guter Doku auch recht schnell von der Hand. Allerdings hab ich jetzt ein Problem für welches ich online keine Lösung gefunden habe und vielleicht kann mir hier jemand helfen. Zumindest bin ich hier in den letzten Tagen öfter fündig geworden :-) Ich hoffe Ihr könnt noch einen weiteren Entwickler in Eurer Community gebrauchen.
Nun aber zu meinem Problem. Ich wollte den OnTouchListener benutzen um bestimme Aktionen bei MotionEvent.ACTION_DOWN und MotionEvent.ACTION_UP auszulösen. Dabei ist mir aufgefallen das MotionEvent.ACTION_UP häufiger kommt als ich es angenommen hatte.
Hier etwas code um zu zeigen was ich meine:
1button.setOnTouchListener(new View.OnTouchListener() {
2
3 public boolean onTouch(View arg0, MotionEvent arg1) {
4
5 // Get the action that was done on this touch event
6 switch (arg1.getAction()) {
7
8case MotionEvent.ACTION_DOWN: {
9// Button pressedButton = (Button) arg0;
10 Log.d(TAG, "ACTION_DOWN");
11// AsyncTask execute = new DoOnMotionDownTask().execute(pressedButton);
12 }
13
14 case MotionEvent.ACTION_UP: {
15 Log.d(TAG, "ACTION_UP");
16// AsyncTask execute = new DoOnMotionUpTask().execute();
17 }
18
19 case MotionEvent.ACTION_OUTSIDE: {
20 Log.d(TAG, "ACTION_OUTSIDE");
21// AsyncTask execute = new DoOnMotionUpTask().execute();
22 }
23
24 case MotionEvent.ACTION_CANCEL: {
25 Log.d(TAG, "ACTION_CANCEL");
26// AsyncTask execute = new DoOnMotionUpTask().execute();
27 }
28
29 case MotionEvent.ACTION_MOVE: {
30 Log.d(TAG, "ACTION_MOVE");
31// AsyncTask execute = new DoOnMotionUpTask().execute();
32 }
33 }
34
35 // if you return false, these actions will not be recorded
36 return false;
37 }
38
39 });
2
3 public boolean onTouch(View arg0, MotionEvent arg1) {
4
5 // Get the action that was done on this touch event
6 switch (arg1.getAction()) {
7
8case MotionEvent.ACTION_DOWN: {
9// Button pressedButton = (Button) arg0;
10 Log.d(TAG, "ACTION_DOWN");
11// AsyncTask execute = new DoOnMotionDownTask().execute(pressedButton);
12 }
13
14 case MotionEvent.ACTION_UP: {
15 Log.d(TAG, "ACTION_UP");
16// AsyncTask execute = new DoOnMotionUpTask().execute();
17 }
18
19 case MotionEvent.ACTION_OUTSIDE: {
20 Log.d(TAG, "ACTION_OUTSIDE");
21// AsyncTask execute = new DoOnMotionUpTask().execute();
22 }
23
24 case MotionEvent.ACTION_CANCEL: {
25 Log.d(TAG, "ACTION_CANCEL");
26// AsyncTask execute = new DoOnMotionUpTask().execute();
27 }
28
29 case MotionEvent.ACTION_MOVE: {
30 Log.d(TAG, "ACTION_MOVE");
31// AsyncTask execute = new DoOnMotionUpTask().execute();
32 }
33 }
34
35 // if you return false, these actions will not be recorded
36 return false;
37 }
38
39 });
Wie ihr seht habe ich die Aktionen mal auskommentiert und statt dessen ein paar Log-Meldungen ausgegeben. Außerdem hab ich noch weiter MotionEvents gefangen um das Verhalten zu untersuchen.
Klicke ich jetzt einmal auf diesen Button und halte die Taste gedrückt so kommen folgende Log-Meldungen:
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_DOWN
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_UP
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_OUTSIDE
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_CANCEL
05-24 13:56:15.833: DEBUG/BoardScreen(3805): ACTION_MOVE
Sobald ich die Maustaste (oder Finger auf dem HTC Desire) wieder los lasse kommt folgendes:
05-24 13:56:19.833: DEBUG/BoardScreen(3805): ACTION_UP
05-24 13:56:19.833: DEBUG/BoardScreen(3805): ACTION_OUTSIDE
05-24 13:56:19.833: DEBUG/BoardScreen(3805): ACTION_CANCEL
05-24 13:56:19.833: DEBUG/BoardScreen(3805): ACTION_MOVE
Ich hatte also die Maus/Finger für 4 Sekunden auf dem Bildschirm. Aber warum bekomme ich beim einfachen Anklicken (inklusive gedrückt halten) folgende Events? ACTION_UP, ACTION_OUTSIDE, ACTION_CANCEL, ACTION_MOVE?
Es trifft doch nichts davon zu..
Ich hoffe sehr das mir jemand helfen kann und bedanke mich jetzt schon mal für jede Beteiligung.
Gruß,
Tobias
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.