guten tag jungenz,
will die aktuelle postition der fingerspitze aufm touchscreen auslesen:
wie mache ich das?
in welchen zeitintervallen kann ich die x/y-koordinaten auslesen?
mfg dennis
-
-
-
hi, danke für die antwort erstmal.
warum gibt die methode einen boolean wert zurück? is true = finger auf display gesetzt und false = wieder angehoben (kein kontakt mit touchscreen)?
wenn ich jetzt im weiterem codeverlauf int posX / int posY verwende, werden diese auch automatisch aktualisiert, oder muss ich das iwie noch
in eine while-schleife, etc. einbauen?
mfg dennis -
Code
Alles anzeigenpublic boolean onTouchEvent(MotionEvent event) // Finger-Koordinaten auslesen { boolean fingerhoch = false; int posX = (int) event.getX(); int posY = (int) event.getY(); if (event.getAction()==1){ // 1 = ACTION_UP (fingerhoch) fingerhoch = true; } return fingerhoch; }
hab das jetzt so gelöst -> immer x und y auslesen, und sobald der finger angehoben wird, wird true zurückgeliefert und
die methode ist beendet.... leider wird jetzt angezeigt, dass int posX / posY "never gereadet" wird, warum?
hab ich iwo einen denkfehler? hab ich die methode falsch verstanden?bitte um schnelle antwort. mfg dennis
-
achso...sorry. Der Wert der, zurück gegeben wird legt einfach fest, ob das Event an Views, die weiter oben in der Hierarchie stehen, weiter geleitet wird. Also in den allermeisten Fällen kann einfach true zurück gegeben werden, wenn das Event behandelt wurde. Ob ein down oder ein up vorleigt, ist im MotionEvent enthalten.
-
danke für die antwort.
was ist mit der frage?:
1)wenn ich jetzt im weiterem codeverlauf int posX / int posY verwende,
werden diese auch automatisch aktualisiert, oder muss ich das iwie noch
in eine while-schleife, o. ähnl. einbauen?und neue fragen (bezogen auf deinen post)::D
2)wofür ist die view-hierarchie gut? wg. view vererbung (wie z.b. button) an andere layouts oda was?3)wenn ich nun folgendes in meine main.java-klasse (meine app besteht nur aus einer activity - einem layout) schreibe, zeigt er mir folgendes an:
"the local variable x (bzw. auch y) is never read" -> warum wird das angezeigt, was mach ich falsch?Code@Override public boolean onTouchEvent(MotionEvent event) { int x = (int)event.getX(); int y = (int)event.getY(); return true; }
mfg denni$ -
1) Also diese Funktion onTouchEvent wird halt jedes mal aufgerufen, wenn der User den Bildschirm berührt (ACTION_DOWN), den Finger darauf bewegt (ACTION_MOVE) oder den Finger wieder runter nimmt (ACTION_UP). Wenn du jetz irgendwo in deinem Programm die position brauchst, die aktuell berührt wird, dann solltest du x und y halt in zwei Membervariablen deines Views speichern und entsprechend abrufen. Allerdings isses in der Regel sinnvoll, die Eingabe gleich dann zu behandeln, wenn sie auftritt, also eben in dieser Funktion zu tun, was dann passieren soll.
2) Nehmen wir mal an ein Button hängt in einem Layout...das is ja ne einfache Hierarchie (nen View is einfach irgendein GUI Element). Wenn jetz der Button angetippt wird, dann wird seine onTouchEvent() Funktion aufgerufen. Wenn die true zurück gibt, wars das. Wenn die false zurück gibt, wird dann die onTouchEvent() Funktion des Layouts aufgerufen. So lange bis es entweder nicht mehr nach oben geht, oder jemand true zurück gibt.
3) Also das onTouchEvent() wird wahrscheinlich in ner Activity nicht funktionieren (nie getestet). Das muss eig. in ne eigene View Klasse, die dann in der Activity mit setContentView() als Inhalt gesetzt wird. In deinem Fall wird das angezeigt, weils stimmt ;-)...das is ne Warnung von Eclipse, dass du den Variablen x und y zwar Werte zuweist, aber danach nie mehr drauf zugreifst. Deshalb könntest dus auch gleich weglassen, will es dir damit sagen.
-
danke für die antworten, klarer ist es auf jedenfall geworden!
zu 1) dann nützt mir die methode ja gar nichts (wie ich das verstanden habe).
ich versuche mein problem deutlicher zu machen:
also sobald ACTION_DOWN und bis ACTION_UP brauche ich immer die aktuelle
position des fingers, aus diesen koordinaten muss dauerhaft ein wert (winkel -> 0 bis 180)
berechnet werden -> anhand dieses wertes werden versch. bilder auf ein canvas
gezeichnet (180 bilder -> pro winkel ein bild).
hier eine skizze (p1-p3: finger tippen / ziehen auf dem bildschirm - z.b. von p1 nach p2 III gelbe striche: zu berechnende winkel):
[Blockierte Grafik: http://250kb.de/u/101217/j/efRpy76MR2Ux.JPG]2) zu 3) "Das muss eig. in ne eigene View Klasse, die dann in der Activity mit setContentView() als Inhalt gesetzt wird. "
-> wie meinst du das genau (bin noch anfänger )? was hat es mit setContentView() auf sich?hab jetzt ne eigene view-klasse erstellt: hab die winkelberechnungs-methode einfach darein kopiert (klappt aber iwie nich), wo und wie
les ich jetzt alles aus (fingerposition und screen-mittelpunkt)?Code
Alles anzeigenpackage zange.app; import android.content.Context; import android.graphics.Color; import android.view.MotionEvent; import android.view.View; public class Leinwand extends View { public Leinwand(Context context) { super(context); // TODO Auto-generated constructor stub setBackgroundColor(Color.BLACK); } @Override public boolean onTouchEvent(MotionEvent event) { int pos_x = (int)event.getX(); int pos_y = (int)event.getY(); return true; } Screen disp = new Screen(); int winkel(){ int mp_x = disp.getmp_x(); int mp_y = disp.getmp_y(); //Mittelpunkt int winkel = (int) Math.atan((mp_x - pos_x)/(mp_y - pos_y)); return winkel; } }
"Deshalb könntest dus auch gleich weglassen, will es dir damit sagen."
-> achso, dumme frage von mir ! java-/ eclipse-neuling bin ich nämlich nichtmfg dennis
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!