P
Patrix
Neues Mitglied
- 0
Code:
[SIZE=2] aktView.setOnTouchListener(new OnTouchListener(){[/SIZE]
[SIZE=2] public boolean onTouch(View view, MotionEvent event){[/SIZE]
[SIZE=2] Toast Fehler; [/SIZE]
[SIZE=2] //float x1, x2, y1, y2; [/SIZE]
[SIZE=2] switch (event.getAction()) [/SIZE]
[SIZE=2] { case MotionEvent.ACTION_DOWN:[/SIZE]
[SIZE=2] x1 = event.getX();[/SIZE]
[SIZE=2] y1 = event.getY();[/SIZE]
[SIZE=2] break;[/SIZE]
[SIZE=2] case MotionEvent.ACTION_UP:[/SIZE]
[SIZE=2] x2 = event.getX();[/SIZE]
[SIZE=2] y2 = event.getY();[/SIZE]
[SIZE=2] float differenceInX = x2-x1;[/SIZE]
[SIZE=2] float differenceInY = y2-y1;[/SIZE]
[SIZE=2] if(Math.abs(differenceInX) > Math.abs(differenceInY)) {[/SIZE]
[SIZE=2] if(differenceInX > 0) {[/SIZE]
[SIZE=2] Fehler = Toast.makeText(getApplicationContext(), "Rechts " + (differenceInX), Length_LONG);[/SIZE]
[SIZE=2] Fehler.show();[/SIZE]
[SIZE=2] }[/SIZE]
[SIZE=2] else {[/SIZE]
[SIZE=2] Fehler = Toast.makeText(getApplicationContext(), "Links " + (differenceInX), Length_LONG);[/SIZE]
[SIZE=2] Fehler.show();[/SIZE]
[SIZE=2] }[/SIZE]
[SIZE=2] } else {[/SIZE]
[SIZE=2] if(differenceInY > 0) {[/SIZE]
[SIZE=2] Fehler = Toast.makeText(getApplicationContext(), "runter " + (differenceInY), Length_LONG);[/SIZE]
[SIZE=2] Fehler.show();[/SIZE]
[SIZE=2] }[/SIZE]
[SIZE=2] else {[/SIZE]
[SIZE=2] Fehler = Toast.makeText(getApplicationContext(), "Hoch " + (differenceInY), Length_LONG);[/SIZE]
[SIZE=2] Fehler.show();[/SIZE]
[SIZE=2] }[/SIZE]
[SIZE=2] }[/SIZE]
[SIZE=2] break;[/SIZE]
[SIZE=2] default: [/SIZE]
[SIZE=2] x1=0;[/SIZE]
[SIZE=2] y1=0;[/SIZE]
[SIZE=2] break; [/SIZE]
[SIZE=2] } [/SIZE]
[SIZE=2] return true;}[/SIZE]
[SIZE=2] });[/SIZE]
"The local variable x1 may not have been initialized" Wenn ich die Variable jedoch innerhalb der onTouch-Routine initialisiere wird der Wert jedesmal überschrieben.
Initialisiere ich die x1-Variable ausserhalb der onTouch-Routine mit final float x1=0. Erhalte innerhalb der Routine die Fehlermeldung:
The final local variable x1 cannot be assigned, since it is defined in an enclosing type
Wie kann man dieses Problem elegant umgehen?
Der ursprüngliche Beitrag von 10:44 Uhr wurde um 10:53 Uhr ergänzt:
Nachdem ich den Code folgendermaßen umgestellt habe:
tritt kein Problem mehr auf. Mir ist jedoch klar, dass diese Lösung mitprivate static float x1=0, x2=0, y1=0, y2=0;
aktView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View view, MotionEvent event){
Toast Fehler;
switch (event.getAction())
{ case MotionEvent.ACTION_DOWN:
x1 = event.getX();
y1 = event.getY();
break;
case MotionEvent.ACTION_UP:
x2 = event.getX();
y2 = event.getY();
float differenceInX = x2-x1;
float differenceInY = y2-y1;
if(Math.abs(differenceInX) > Math.abs(differenceInY)) {
if(differenceInX > 0) {
Fehler = Toast.makeText(getApplicationContext(), "Rechts X" + Math.abs(differenceInX) + " Y " + Math.abs(differenceInY), Length_LONG);
Fehler.show();
}
if(differenceInX < 0) {
Fehler = Toast.makeText(getApplicationContext(), "Links X" + Math.abs(differenceInX) + " Y " + Math.abs(differenceInY), Length_LONG);
Fehler.show();
}
}
if(Math.abs(differenceInX) < Math.abs(differenceInY))
{
if(differenceInY > 0) {
Fehler = Toast.makeText(getApplicationContext(), "runter X" + Math.abs(differenceInX)+ " Y " + Math.abs(differenceInY) , Length_LONG);
Fehler.show();
}
if (differenceInY < 0) {
Fehler = Toast.makeText(getApplicationContext(), "Hoch X" + Math.abs(differenceInX) + " Y " + Math.abs(differenceInY), Length_LONG);
Fehler.show();
}
}
break;
}
return true;}
private static float x1=0, x2=0, y1=0, y2=0; sehr unsauber ist. Gibt es eine elegantere Möglichkeit?
Zuletzt bearbeitet: