как определить период нажатия кнопки на андроиде - PullRequest
1 голос
/ 10 декабря 2010

Есть ли способ определить, как долго нажимается кнопка? Я хочу запечатлеть время нажатия кнопки и действовать соответственно. Так что, если пользователь продолжал нажимать кнопку в течение 5 секунд, я хочу обнаружить эти 5 секунд на Android.

Пожалуйста, дайте мне знать

Спасибо Pranay

Ответы [ 4 ]

3 голосов
/ 04 января 2012

Используйте следующие для определения продолжительности касания. Вы можете использовать это в операторе if: event.getEventTime () - event.getDownTime ()> 5000 Он рассчитывается в мс, что означает, что для ваших 5 секунд вам нужно, чтобы это число было 5000

НЕ ИСПОЛЬЗУЙТЕ: android.os.SystemClock.elapsedRealtime () - event.getDownTime () Это может работать на симуляторе, но не будет работать на устройстве! Не спрашивайте меня, откуда я это знаю;)

2 голосов
/ 10 декабря 2010

Дайте кнопке View.OnTouchListener .Реализованный вами метод onTouch предоставит вам доступ к MotionEvent .Затем, используя getFlags (), вы узнаете, когда пользователь начинает нажимать кнопку (ACTION_DOWN) и когда он останавливается (ACTION_UP).Просто запишите системное время, когда это произойдет (или, как предложено в другом ответе, getDownTime () даст нужное вам время, но только при наличии флага ACTION_UP).

1 голос
/ 28 апреля 2016
    private long timeElapsed = 0L; //make this a global variable

    //tvTouches could be a TextView or Button or other views
    tvTouches.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    timeElapsed = event.getDownTime();
                    Log.d("setOnTouchListener", "ACTION_DOWN at>>>" + event.getDownTime());
                    break;
                case MotionEvent.ACTION_UP:
                    timeElapsed = event.getEventTime() - timeElapsed;
                    Log.d("setOnTouchListener", "ACTION_UP at>>>" + event.getEventTime());
                    Log.d("setOnTouchListener", "Period of time the view is pressed>>>" + timeElapsed);
                    Toast.makeText(getApplicationContext(), "Period of time the view is pressed in milliseconds>>>" + timeElapsed, Toast.LENGTH_SHORT).show();
                    timeElapsed = 0L;
                    //TODO do something when a certain period of time has passed
                    break;
                default:
                    break;
            }
            return true;
        }
    });
1 голос
/ 10 декабря 2010

Зарегистрируйте OnTouchListener на кнопке. Затем в слушателе используйте MotionEvent:

http://developer.android.com/reference/android/view/MotionEvent.html

Затем используйте метод getDownTime () события:

http://developer.android.com/reference/android/view/MotionEvent.html#getDownTime%28%29

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...