Wie schreibt man es richtig?(OnTouchListener)

  • 6 Antworten
  • Letztes Antwortdatum
JavaFuchs07

JavaFuchs07

Neues Mitglied
1
Hey liebe Community,

ich versuche gerade einen code zu schreiben, der mit Hilfe eines Toasts erzählt, wenn man die Position des Fingers auf dem Bildschirm ändert.
Wenn ich an der gleichen Stelle auf der View bleibe, soll ein Toast erscheinen:"Bewegt", wenn ich meinen Finger bewege, soll ein anderer Toast erscheinen.
Code:
Code:
@Override
	public boolean onTouch(View v, MotionEvent event) {
		int aktion = event.getAction();
		if(aktion == MotionEvent.ACTION_DOWN) {
			touchedX =  event.getX();
			touchedY = event.getY();
		}
		if(aktion == MotionEvent.ACTION_UP) {
			x = event.getX();
			y = event.getY();
		}
		if(aktion == MotionEvent.ACTION_DOWN && aktion == MotionEvent.ACTION_UP) {
			if(x == touchedX && y == touchedY) {
				Toast nichtbewegt = Toast.makeText(v.getContext(), "Nicht bewegt!", Toast.LENGTH_SHORT);
				nichtbewegt.show();
			}
			else if(x != touchedX || y != touchedY) {
				Toast bewegt = Toast.makeText(v.getContext(), "Bewegt!", Toast.LENGTH_SHORT);
				bewegt.show();
			}
		}

	return true;
	}
Ich weiß, dass:
Code:
if(aktion == MotionEvent.ACTION_DOWN && aktion == MotionEvent.ACTION_UP)
nicht richtig sein kann, aber wie schreibt man es denn richtig?

Grüße JavaFuchs07!
 
ja die action kann nicht gleichzeitig DOWN und UP sein.

es gibt aber noch ACTION_MOVE, das kommt wenn der finger bewegt wird.

aber dort einen toast ausgeben wäre nicht klug, da das event sehr oft bearbeitet wird.
 
Also ist es gar nicht programmierbar, dass ein Toast erscheint, wenn ich irgendwo drücke und an einer anderen Stelle den Klick aufhebe?
Das wäre nämlich wichtig für eine Spielende von mir :)

gruß JavaFuchs07
 
Natuerlicj geht das. Du musst dir nur mal in der Doku anschauen, wie es richtig funktioniert und was ActionUp ueberhuaot bedeutet.
In deinem fall fragst du quasi:
Wurde gleichzeitig beim beruehren des Bildschirms (actionDown) der bildschirm los gelasse ?(actionUp)

Gesendet von meinem Nexus 10 mit Tapatalk 4
 
Ich weiß ganz klar die Bedeutung dieser Actions, ich habe es aber auch schon anders ausprobiert :
Code:
@Override
	public boolean onTouch(View v, MotionEvent event) {
		int aktion = event.getAction();
		if(aktion == MotionEvent.ACTION_DOWN) {
			touchedX =  event.getX();
			touchedY = event.getY();
		}
		if(aktion == MotionEvent.ACTION_UP) {
			x = event.getX();
			y = event.getY();
		}
		if(touchedX != x) {
			Toast xBewegt = Toast.makeText(v.getContext(), "In X Richtung bewegt!", Toast.LENGTH_SHORT);
			xBewegt.show();
		}
		if(touchedX == x) {
			Toast nichtbewegt = Toast.makeText(v.getContext(), "Nicht in X Richtung bewegt!", Toast.LENGTH_SHORT);
			nichtbewegt.show();
		}

	return true;
	}
Hier spuckt er mir aber leider sofort beim klicken den Toast raus, ich hätte die X Richtung geändert. Das kommt daher, weil ja beim Action_DOWN Event die touchedX Koordinaten ja ungleich x sind.
Mir fällt aber absolut keine andere Lösung ein! (Hab mich auch noch nicht allzu lange damit beschäftigt)...

grüße JavaFuchs07
 
Du hast neben actionDown und actionUp auch actionMove. Im actionDown musst du dir die Koordinaten holen. Im actionMove wird dann jede Bewegung mit dem Finger registriert...

Gesendet von meinem Nexus 4 mit Tapatalk 4
 
Ah Okay, hab es jetzt geschafft. Leider ist das nicht das gewünschte Ergebnis, aber immerhin ein kleiner Erfolg. Code:
Code:
@Override
	public boolean onTouch(View v, MotionEvent event) {
		int aktion = event.getAction();
		if(aktion == MotionEvent.ACTION_DOWN) {
			touchedX =  event.getX();
			touchedY = event.getY();
		}
		if(aktion == MotionEvent.ACTION_MOVE) {
			x = event.getX();
			y = event.getY();
				
		if(touchedX != x) {
			Toast xBewegt = Toast.makeText(v.getContext(), "In X Richtung bewegt!", Toast.LENGTH_SHORT);
			xBewegt.show();
		}
		else if(touchedX == x) {
			Toast nichtbewegt = Toast.makeText(v.getContext(), "Nicht in X Richtung bewegt!", Toast.LENGTH_SHORT);
			nichtbewegt.show();
		}

	}
		return true;
	}

Vielen Dank!


grüße JavaFuchs07!
 
Zurück
Oben Unten