Anfängerfrage zu SetOnTouchListener

  • 1 Antworten
  • Letztes Antwortdatum
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]
den Hinweis :

"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:
private 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;}
tritt kein Problem mehr auf. Mir ist jedoch klar, dass diese Lösung mit
private static float x1=0, x2=0, y1=0, y2=0; sehr unsauber ist. Gibt es eine elegantere Möglichkeit?
 
Zuletzt bearbeitet:
warum machst es static ?
 
Zurück
Oben Unten