Ich mache ein Spiel auf Android und ich muss bestimmte Aktionen tun, wenn die Benutzer einen langen Druck auf dem Bildschirm versucht. Leider habe ich keine Methoden gefunden, die direkt mit einem benutzerdefinierten SurfaceView funktionieren. Sagen Sie mir bitte, ob es eine solche Methode gibt :)Long Touch auf einem SurfaceView (Android)
Also entschied ich mich, eine lange Berührungserkennung vom onTouch Event Listener zu implementieren.
hier ist mein Code:
@Override
public boolean onTouch(View v, MotionEvent event)
{
long touchDuration = 0;
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
//Start timer
touchTime = System.currentTimeMillis();
}else if (event.getAction() == MotionEvent.ACTION_UP)
{
//stop timer
touchDuration = System.currentTimeMillis() - touchTime;
if (touchDuration < 800)
{
onShortTouch(event,touchDuration);
}else
{
onLongTouch(event,touchDuration);
}
}
}
return true;
Dies funktioniert, aber ich kann erkennen, ob die Presse eine lange drücken oder war nicht nur, wenn der Benutzer aufhört, das Telefon zu berühren. Es ist nicht genau das, was ich will. Ich würde es vorziehen, wenn ein Timer starten würde, wenn der Benutzer den Bildschirm zum ersten Mal berührt, und sobald 800 ms verstrichen sind, wird die LongTouch() -Methode aufgerufen. Mit anderen Worten, ich möchte nicht überprüfen müssen, wie lange ACTION_UP seit ACTION_DOWN abgelaufen ist. Ich glaube, ich sollte einen Thread für den besagten Timer verwenden, aber ich kann es nicht funktionieren lassen.
@Override
public boolean onTouch(View v, MotionEvent event)
{
long touchDuration = 0;
TouchThread touchThread = new TouchThread();
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
//Start timer
touchTime = System.currentTimeMillis();
touchThread.setEvent(event);
touchThread.run();
}
return true;
}
private class TouchThread extends Thread
{
public MotionEvent event = null;
public void setEvent(MotionEvent e)
{
event = e;
}
@Override
public void run()
{
long startTime = System.currentTimeMillis();
long time = 0;
while(event.getAction() == MotionEvent.ACTION_DOWN)
{
time = System.currentTimeMillis() - startTime;
if(time > 800)
{
System.out.println("LOOONG CLICK!!");
return;
}
}
}
}
Hat jemand eine Idee: Wenn Sie den folgenden Code verwenden, wird die Debug-Meldung, sobald ich den Bildschirm berühren angezeigt? Eine andere Lösung wäre ebenfalls willkommen.
Danke.