Android TV: управление воспроизведением
Я пытаюсь реализовать ускоренную перемотку вперед и назад, используя PlaybackControlsRow
с помощью Leanback library
за Android TV
Однако я не могу найти какой-либо метод, чтобы обнаружить долгое нажатие на эти кнопки. Моя текущая реализация проста, только поиск в течение 10 секунд одним щелчком мыши:
private void setupRows() {
final ClassPresenterSelector ps = new ClassPresenterSelector();
final PlaybackControlsRowPresenter playbackControlsRowPresenter =
new PlaybackControlsRowPresenter(new DescriptionPresenter());
playbackControlsRowPresenter.setOnActionClickedListener(action -> {
if (action.getId() == playPauseAction.getId()) {
togglePlayback(playPauseAction.getIndex() == PlayPauseAction.PLAY);
} else if (action.getId() == fastForwardAction.getId()) {
fastForward();
return;
} else if (action.getId() == rewindAction.getId()) {
rewind();
return;
}
if (action instanceof PlaybackControlsRow.MultiAction) {
((PlaybackControlsRow.MultiAction) action).nextIndex();
notifyChanged(action);
}
});
ps.addClassPresenter(PlaybackControlsRow.class, playbackControlsRowPresenter);
ps.addClassPresenter(ListRow.class, new ListRowPresenter());
rowsAdapter = new ArrayObjectAdapter(ps);
updatePlaybackControlsRow();
setAdapter(rowsAdapter);
}
private void fastForward() {
((PlaybackActivity) getActivity()).onFragmentFastForward();
final int currentTime = ((PlaybackActivity) getActivity()).getPosition();
playbackControlsRow.setCurrentTime(currentTime);
}
private void rewind() {
((PlaybackActivity) getActivity()).onFragmentRewind();
final int currentTime = ((PlaybackActivity) getActivity()).getPosition();
playbackControlsRow.setCurrentTime(currentTime);
}
В PlaybackActivity
:
public void onFragmentFastForward() {
// Fast forward 10 seconds.
videoView.seekTo(videoView.getCurrentPosition() + (10 * 1000));
}
public void onFragmentRewind() {
videoView.seekTo(videoView.getCurrentPosition() - (10 * 1000));
}
Можно ли осуществить быструю перемотку вперед и назад при длительном нажатии на действия, например, событиях нажатия клавиш вверх / вниз на кнопках действий?
1 ответ
После поиска других решений, кажется, что PlaybackControlsRowPresenter
разработан таким образом, что он не должен иметь длительных нажатий, а вместо этого увеличивает / уменьшает скорость на количество нажатий на кнопки быстрой перемотки вперед / назад. Это хорошо видно из внутренней реализации конструктора PlaybackControlsRowPresenter.FastForwardAction
а также PlaybackControlsRowPresenter.RewindAction
классы:
/**
* Constructor
* @param context Context used for loading resources.
* @param numSpeeds Number of supported fast forward speeds.
*/
public FastForwardAction(Context context, int numSpeeds) {
Таким образом, в результате мое решение на данный момент заключается в увеличении / уменьшении скорости при каждом нажатии кнопок быстрой перемотки вперед / назад (что по умолчанию выполняется в пользовательском интерфейсе). После этого, когда я нажимаю на воспроизведение - он просто возобновляет видео с искомой точки.