我设置了onTouchListener
,允许用户完全点击textView2
10次,如下所示。我的目标是测量触摸1和触摸2之间的时间,并将其存储为变量,例如time1
。但是,我不太清楚如何做到这一点。我的一个想法是设置一个变量i
,用于衡量TouchListener
被点击的次数。我在考虑可能测量i
包含特定值的时间(例如,如果i
等于1持续1秒,这意味着触摸1和触摸2之间的时间为1秒) 。但是我不确定如何实现这个,我甚至不确定这是否是正确的方法。有谁知道如何解决这个问题?
.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 :(得分: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;
}
现在您有触摸事件之间的持续时间:
- 编辑 -
如果您需要知道所有事件的时间差异,您可以执行类似
的操作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而不是duration = ... do
durations.add(System.currentTimeMillis() - lastEvent);
这对于检查所有顺序事件之间的所有持续时间非常有用。例如,如果您想知道按下,拖动,停止拖动,开始拖动,然后提升之间的时间,您可以在每次提起相关问题后检查列表,而不必经常检查单个持续时间。
答案 1 :(得分: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++;
}
}