2011-03-11 94 views

回答

12

您可以嘗試混合MotionEventRunnable/Handler來實現此目的。

示例代碼:

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); 
     } 
    } 
} 

現在你只需要檢查,如果mBooleanIsPressed是在checkGlobalVariable()功能true

我寫這篇文章時提出的一個想法是使用簡單的時間戳(例如System.currentTimeMillis())來確定MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP之間的持續時間。

+0

確定。這是我在大部分活動屏幕上需要的。我將如何在活動屏幕上啓用監聽。我已經在活動中實現了onTouchEvent偵聽器,但是如何爲該活動啓用此操作,以便在用戶觸摸活動屏幕時調用onTouchEvent。謝謝 – Androider 2011-03-11 22:17:26

+0

大多數例子是根據畫布等。我的onTouchEvent沒有被調用時,用戶觸摸活動屏幕 – Androider 2011-03-11 22:20:47

+0

@Androider:也許你正在尋找http://developer.android.com/reference/android/app/Activity的.html#dispatchTouchEvent(android.view.MotionEvent)? – Wroclai 2011-03-11 22:28:53

8

在這種情況下,您不能使用unix時間戳。 Android提供了自己的時間測量。

long eventDuration = 
      android.os.SystemClock.elapsedRealtime() 
      - event.getDownTime(); 
21
long eventDuration = event.getEventTime() - event.getDownTime();