2014-05-21 80 views
1

我已經設置了一個onTouchListener,它允許用戶精確地點擊textView2 10次,如下所示。我的目標是測量觸摸1和觸摸2之間的時間,並將其存儲爲變量,如time1。但是,我不太清楚如何做到這一點。我有一個想法是設置一個變量,即i,它測量TouchListener被點擊的次數。我在考慮可能測量i包含特定值的時間(例如,如果i等於1 1秒,這意味着觸摸1和觸摸2之間的時間爲1秒)。但是我不確定如何實現這一點,我甚至不確定這是否是正確的方法。有誰知道如何解決這個問題?在android中查找觸摸事件之間的時間間隔

.java文件

public class MainActivity extends Activity { 

int i; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final TextView textView2 = (TextView)findViewById(R.id.textView2); 

    i=0; 

    textView2.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN){ 
       i++; 
       if (i==10) textView2.setOnTouchListener(null); 

      } 
      return false; 
     } 
    });   

} 
+0

所以,你要蓋在給定的時間內請求的數量? – Raffaele

+0

@Raffaele否我只是想測量每個觸摸事件之間的持續時間 – user3616949

回答

3

在你的類

private long pressTime = -1l; 
private long releaseTime = 1l; 
private long duration = -1l; 

然後在您的onTouch方法

if(event.getAction() == MotionEvent.ACTION_DOWN){ 
    pressTime = System.currentTimeMillis(); 
    if(releaseTime != -1l) duration = pressTime - releaseTime; 
} 
else if(event.getAction() == MotionEvent.ACTION_UP){ 
    releaseTime = System.currentTimeMillis(); 
    duration = System.currentTimeMillis() - pressTime; 
} 

現在你有觸摸事件之間的持續時間:

  • 按下的時間是上次釋放和當前按下之間的時間(如果您先前已按下並釋放按鈕)。
  • 您釋放的持續時間是您上次按下和當前釋放時間之間的時間。

CNC中

如果你需要知道的所有事件的時間差你可以做這樣的事情

private long lastEvent = -1l; 
private long duration = -1l; 

然後在onTouch事件

if(lastEvent != -1l) duration = System.currentTimeMillis() - lastEvent; 
lastEvent = System.currentTimeMillis(); 

你也可以創建一個持續時間列表

private List<Long> durations = new ArrayList<Long>(); 

和onTouch,而不是持續時間= ...做

durations.add(System.currentTimeMillis() - lastEvent); 

這可能是檢查所有序列事件之間的所有持續時間非常有用。例如,如果您想知道按下,拖動,停止拖動,開始拖動,然後擡起之間的時間,可以在每次提起問題後檢查您的列表,而不必不斷檢查單個持續時間。

+0

很酷,你知道我可以如何適應9個不同的持續時間嗎?是否有可能使用9個持續時間變量? – user3616949

+0

@ user3616949您可以爲每個事件添加一個變量(如dragTime和stuff),並修改我發佈的原始代碼以確定期望事件之間的時間間隔(如按下按下和移動之間的時間),也可以使用類似於我在我的編輯中添加了對所有事件執行操作。 – zgc7009

0

您可能希望保留List中的事件記錄。存儲在此列表中的對象將保留觸摸事件的時間戳,並且由於UI事件由單個線程分派並且時鐘是單音的,所以您可以保證N + 1的事件具有比事件處於更晚(最多相等)的時間戳索引N

但是我不清楚你如何清理這個列表。這取決於你如何以及爲什麼要閱讀事件,而這又取決於你想要做什麼以及兩次後續觸摸之間的延遲。

例如,如果你只是想顯示自上次觸摸的時候,這樣一個簡單的代碼可能是不夠的:

public class MyActivity { 

    private int times = 0; 
    private long lastTimestamp; 

    private void onTouchEvent(Event evt) { 
    if (times > 0) { 
     long delay = evt.getTimestamp() - lastTimestamp; 
     // do something with the delay 
    } 
    lastTimestamp = evt.getTimestamp(); 
    times++; 
    } 
}