我想让图像徘徊不去 我试过这个:
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;
}
});
但它给了我一个空的例外,我该怎么做才能使它工作?
提前感谢,
答案 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)
每次执行此方法时,start
或end
个对象都将为null。如果操作是UP,那么在您尝试使用它进行计算之前,end
永远不会被初始化。如果操作为DOWN,则在您尝试使用它进行计算之前,start
永远不会被初始化。
您可以使开始/结束变量的范围更大,例如将它们定义为类变量。这样,大概两个变量将在尝试使用它们之前初始化为值。
答案 2 :(得分:-2)
只需更改此行
即可 Long start = null, end = null;
到
Long start =0L;
Long end = 0L;