获取当前时间毫秒在Android onTouchListener中始终相同

时间:2016-10-16 15:49:57

标签: android ontouchlistener

我正在开发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;
            }
        });

正如您在上面的代码中所看到的,我记住用户触摸布局时的时间,然后向当前时间毫秒的值和用户触摸的时间进行干杯。几秒后触摸退出。但退出时,它会像下面的屏幕截图一样烘烤相同的值。

enter image description here

为什么这两个值相同?实际上它应该是不同的,因为触地和触摸时间不一样。我的代码出了什么问题?我怎样才能正确记住时间?

2 个答案:

答案 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并在向下和向上操作时添加毫秒并比较这两个值。