有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

但是它给了我一个空的异常,我能做些什么使它工作呢

提前感谢,


共 (3) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    它为您提供空指针异常,因为您使用的是“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;
        }
    }
    
  3. # 3 楼答案

    换一行就行了

    Long start = null, end = null;

           Long start =0L;
           Long  end = 0L;