如何让图像徘徊不去?

时间:2013-09-15 18:50:15

标签: java android time ontouchlistener

我想让图像徘徊不去 我试过这个:

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 个答案:

答案 0 :(得分:1)

它为您提供空指针异常,因为您在使用“end”和“start”时它们仍为null。此外,ACTION_DOWN在ACTION UP之前发生。第一次触摸视图时会触发ACTION_DOWN,而当你抬起手指时会触发ACTION_UP。

此外,您必须在onTouch方法之外定义变量,否则它们将不会被初始化,因为ACTION_DOWN和ACTION_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;
    }
}

答案 1 :(得分:0)

每次执行此方法时,startend个对象都将为null。如果操作是UP,那么在您尝试使用它进行计算之前,end永远不会被初始化。如果操作为DOWN,则在您尝试使用它进行计算之前,start永远不会被初始化。

您可以使开始/结束变量的范围更大,例如将它们定义为类变量。这样,大概两个变量将在尝试使用它们之前初始化为值。

答案 2 :(得分:-2)

只需更改此行

即可

Long start = null, end = null;

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