java - 在android中查找触摸事件之间的持续时间

标签 java android

我已经设置了一个 onTouchListener,它允许用户恰好点击 textView2 10 次,如下所示。我的目标是测量触摸 1 和触摸 2 之间的时间,并将其存储为变量,比如 time1。但是,我不太确定该怎么做。我的一个想法是设置一个变量 i,它测量 TouchListener 被点击的次数。我正在考虑潜在地测量 i 包含特定值的时间(例如,如果 i 等于 1 持续 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;
        }
    });         

}

最佳答案

在你的类里面

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

这对于检查所有连续事件之间的所有持续时间可能很有用。例如,如果您想知道按下、拖动、停止拖动、开始拖动和抬起之间的时间,您可以在每次抬起后检查您的列表,而不必不断地检查单个持续时间。

关于java - 在android中查找触摸事件之间的持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793345/

相关文章:

java - return json.getString ("key") 当我想要获取俄语字符时返回 null

java - 如何修复应用程序:lint error when building flutter app?

java - 在 Apache Wicket 中更改模态窗口的 unloadConfirmation 消息

android - 试图让 proguard 工作,但它总是失败

Android 相机 android.hardware.Camera 已弃用

android - 服务共享声音资源

java - Guava 的 Collections.unmodifiableSet() 和 ImmutableSet 有什么区别?

java - 需要 pdf 渲染器的帮助

android - 根据 API 版本从 android 属性设置按钮的背景

java - 从服务器上的文件解析 json