Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获得图像悬停的时间?_Java_Android_Time_Ontouchlistener - Fatal编程技术网

Java 如何获得图像悬停的时间?

Java 如何获得图像悬停的时间?,java,android,time,ontouchlistener,Java,Android,Time,Ontouchlistener,我想让图像长时间悬停 我试过这个: image.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent event) { Long start = null, end = null; switch (event.getAction()) {

我想让图像长时间悬停 我试过这个:

image.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View arg0, MotionEvent event) {
                Long start = null, end = null;
                switch (event.getAction()) {
                    case MotionEvent.ACTION_UP:
                        start = System.currentTimeMillis();
                       //do somethins....
                        break;
                    case MotionEvent.ACTION_DOWN:
                         end = System.currentTimeMillis();
                        //do something...
                        break;
                }
                if(end-start<1003){
                     //do something ....
                  }
                return true;
            }
        });
但是它给了我一个空的异常,我能做些什么使它工作呢

提前感谢,

每次执行此方法时,开始或结束对象都将为空。如果操作已启动,则在尝试使用end进行计算之前,end永远不会初始化。如果操作已关闭,则在尝试使用它进行计算之前,不会初始化start

您可以使开始/结束变量的作用域更大,例如将它们定义为类变量。这样,两个变量在进行任何计算之前都将被初始化为值。

只需更改这一行即可

长起始=空,结束=空


它为您提供空指针异常,因为您使用的是end和start,而它们仍然为空。此外,动作下降发生在动作上升之前。第一次触摸视图时,“向下”操作会触发,而“向上”操作会在抬起手指时触发

此外,您必须在onTouch方法之外定义变量,否则它们永远不会同时被初始化,因为ACTION\u DOWN和ACTION\u UP永远不会同时被调用

Long start = 0L, end = 0L;

@Override
public boolean onTouch(View arg0, MotionEvent event) {

    switch (event.getAction()) {
        case MotionEvent.ACTION_UP:
            end = System.currentTimeMillis();
            //do something....
            if(end-start<1003){
                     //do something ....
            }
            return true;
        case MotionEvent.ACTION_DOWN:
            start = System.currentTimeMillis();
            //do something...         
            return true;
    }
}

谢谢你,Kon,但我知道问题是什么,我正在寻找答案,问题是:图像悬停的时间如何长?第一次运行时会给你垃圾数据。
Long start = 0L, end = 0L;

@Override
public boolean onTouch(View arg0, MotionEvent event) {

    switch (event.getAction()) {
        case MotionEvent.ACTION_UP:
            end = System.currentTimeMillis();
            //do something....
            if(end-start<1003){
                     //do something ....
            }
            return true;
        case MotionEvent.ACTION_DOWN:
            start = System.currentTimeMillis();
            //do something...         
            return true;
    }
}