我正在开发Android应用程序。在我的应用程序中,我需要在onTouchListener中获得当前时间毫秒。我正在做的是当我触摸视图时,我以毫秒记住那个时间,然后当触摸退出时,我计算第一次触摸和离开之间的时间差。请参阅下面的代码。
//about container is a linear layout
aboutContainer.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
long timeWhenDown = System.currentTimeMillis();
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
timeWhenDown = System.currentTimeMillis();
}
if(event.getAction()==MotionEvent.ACTION_UP)
{
Toast.makeText(getBaseContext(),String.valueOf(timeWhenDown) + " - " + String.valueOf(System.currentTimeMillis()),Toast.LENGTH_SHORT).show();
}
return false;
}
});
正如您在上面的代码中所看到的,我记住用户触摸布局时的时间,然后向当前时间毫秒的值和用户触摸的时间进行干杯。几秒后触摸退出。但退出时,它会像下面的屏幕截图一样烘烤相同的值。
为什么这两个值相同?实际上它应该是不同的,因为触地和触摸时间不一样。我的代码出了什么问题?我怎样才能正确记住时间?
答案 0 :(得分:3)
您需要将变量timeWhenDown
声明为ontouch函数的全局变量,因为这样每个触摸事件timeWhenDown
都会被设置为新值
public class MainActivity extends AppCompatActivity {
View aboutContainer;
long timeWhenDown;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aboutContainer = (View)findViewById(R.id.aboutContainer);
aboutContainer.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction () == MotionEvent.ACTION_DOWN)
{
timeWhenDown = System.currentTimeMillis();
}
else if(event.getAction() == MotionEvent.ACTION_UP)
{
Toast.makeText(getBaseContext(),String.valueOf(timeWhenDown) + " - " + String.valueOf(System.currentTimeMillis()),Toast.LENGTH_SHORT).show();
}
return true;
}
});
}
}
我测试了代码及其工作正常。
答案 1 :(得分:0)
您需要创建一个全局arraylist并在向下和向上操作时添加毫秒并比较这两个值。