Объединение функций «Далее» и «Вперед» в виде одной кнопки в Android eclipse

Я создаю музыкальный проигрыватель для Android. Я собираюсь сделать так, чтобы кнопки «Далее» и «Вперед» работали в одной кнопке в зависимости от продолжительности ее удержания. При коротком нажатии она работает как кнопка «Далее», а при длительном — как кнопка «вперед». Я пробовал это с помощью onLongClickListener, но происходит то, что он перестает пересылаться еще до того, как пользователь нажимает кнопку. Как мне реализовать это таким образом, чтобы действие не останавливалось, пока пользователь не удерживает кнопку? Вот мой код. Заранее спасибо.

        btnNext.setOnLongClickListener(new OnLongClickListener() {

        @Override
        public boolean onLongClick(View arg0) {
            // get current song position
            int currentPosition = mp.getCurrentPosition();

            // check if seekForward time is lesser than song duration
            if (currentPosition + seekForwardTime <= mp.getDuration()) {
                // forward song
                mp.seekTo(currentPosition + seekForwardTime + LONG_CLICK_LISTERNER_INTERVAL);
            } else {
                // forward to end position
                mp.seekTo(mp.getDuration());
            }
            return true;

        }
    });

person MilkShake    schedule 17.12.2013    source источник


Ответы (1)


См. этот мой пост События для долгого нажатия вниз и нажмите вверх в Android

Если вы хотите обнаруживать события касания, которые в Android называются MotionEvent, вам необходимо переопределить метод onTouchEvent(MotionEvent e) и использовать класс GestureDetector для определения длительного нажатия.

private GestureDetector mGestureDetector;

public FfwRewButton(...) {
    //....
    mGestureDetector = new GestureDetector(context, 
        new GestureDetector.SimpleOnGestureListener() {
            public boolean onDown(MotionEvent e) {
                mLongClicked = false;
                return true;
            }
            public void onLongPress(MotionEvent e) {
                mLongClicked = true;
                // long press down detected
            }
    });
}

public boolean onTouchEvent(MotionEvent e) {
    mGestureDetector.onTouchEvent(e);
    if (mLongClicked && e.getAction() == ACTION_UP) {
           // long press up detected
        }
    }
}

при длительном нажатии вниз вы можете запустить поток, делающий то же самое в цикле, и остановиться при длительном нажатии вверх, надеюсь, это поможет вам

person Charan Pai    schedule 17.12.2013