2017-03-11 5 views
1

PlaybackControlsRowを使用して早送り巻き戻しアクションを実装しようとしていますが、Leanback libraryAndroid TVに使用していますが、これらのボタンで長押しを検出する方法が見つかりません。 PlaybackActivityAndroid TV:PlaybackControlsRowアクション長押し

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); 
} 

:私の現在の実装では、クリックするだけで10秒を求めない、シンプルで

public void onFragmentFastForward() { 
    // Fast forward 10 seconds. 
    videoView.seekTo(videoView.getCurrentPosition() + (10 * 1000)); 
} 

public void onFragmentRewind() { 
    videoView.seekTo(videoView.getCurrentPosition() - (10 * 1000)); 
} 

それは早送りを実装し、アクションの長押しで巻き戻し、のようにすることは可能ですアクションボタンのキーアップ/キーダウンイベント?

+1

[GestureDetector](https://developer.android.com/reference/android/view/GestureDetector.html)を試してみてください。これは基本的に、個々のタッチイベントを処理せずに共通のジェスチャーを検出することを容易にしますあなた自身。これは 'onLongPress()'をサポートしています。 詳細とサンプルスニペットについては、[ジェスチャーの検出](https://developer.android.com/training/gestures/detector.html#detect)をご覧ください。 – Teyam

+0

@Teyamはい、ありがとう。それが可能な解決策かもしれない。しかし、私は 'PlaybackControlsRow'の' Leanback library'の中にある程度のサポートがあると思っていましたが、それはそうではありません。 –

答えて

0

他の解決策を探した後、PlaybackControlsRowPresenterは、長押しをすべきではなく、早送り/巻き戻しボタンのクリック数を増減するように設計されているようです。

/** 
* Constructor 
* @param context Context used for loading resources. 
* @param numSpeeds Number of supported fast forward speeds. 
*/ 
public FastForwardAction(Context context, int numSpeeds) { 

ので、(早送り/巻き戻しボタンをクリックして、結果として、今の私の解決策は、/増加している各によって速度を下げる:それははっきりPlaybackControlsRowPresenter.FastForwardActionPlaybackControlsRowPresenter.RewindActionクラスの内部コンストラクタ実装から見ることができますこれはデフォルトでUI上で行われます)。その後、私がプレイをクリックすると、シークされたポイントからビデオが再生されます。

関連する問題