Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Touch Event determining duration

Tags:

android

touch

How does one detect the duration of an Android 2.1 touch event? I would like to respond only if the region has been pressed for say 5 seconds?

like image 753
Androider Avatar asked Mar 11 '11 21:03

Androider


3 Answers

long eventDuration = event.getEventTime() - event.getDownTime();
like image 145
Calebe Santos Avatar answered Sep 21 '22 11:09

Calebe Santos


You could try mixing MotionEvent and Runnable/Handler to achieve this.

Sample code:

private final Handler handler = new Handler();
private final Runnable runnable = new Runnable() {
    public void run() {
         checkGlobalVariable();
    }
};

// Other init stuff etc...

@Override
public void onTouchEvent(MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN) {
        // Execute your Runnable after 5000 milliseconds = 5 seconds.
        handler.postDelayed(runnable, 5000);
        mBooleanIsPressed = true;
    }

    if(event.getAction() == MotionEvent.ACTION_UP) {
        if(mBooleanIsPressed) {
            mBooleanIsPressed = false;
            handler.removeCallbacks(runnable);
        }
    }
}

Now you only need to check if mBooleanIsPressed is true in the checkGlobalVariable() function.

One idea I came up with when I was writing this was to use simple timestamps (e.g. System.currentTimeMillis()) to determine the duration between MotionEvent.ACTION_DOWN and MotionEvent.ACTION_UP.

like image 41
Wroclai Avatar answered Sep 19 '22 11:09

Wroclai


You can't use unix timestamps in this case. Android offers it's own time measurement.

long eventDuration = 
            android.os.SystemClock.elapsedRealtime() 
            - event.getDownTime();
like image 28
Sebastian Ullrich Avatar answered Sep 19 '22 11:09

Sebastian Ullrich