2012-05-08 6 views
0

私はカスタムビデオプレーヤーを作成しようとしています。 VideoViewを使用してムービーを表示し、MediaControllerを使用してビデオを制御します。メディアコントローラのタップ面を変更するには?

ユーザーが画面をタップすると、ヘッダーとメディアコントローラーが3秒間表示されます(ユーザーが操作を続ける場合はそれ以上)。また、ユーザーがビデオを再びタップすると、両方の要素が隠れるはずです。

画面の最初のタップで、ヘッダーとコントローラーが期待通りに表示されます。私の問題は、画面上でもう一度タップしようとすると、コントローラーが隠れてしまい、ヘッダーが消えないということです。これはMediaControllerが独自のタップサーフェイスを定義しているので、私の質問はこれをどのように変更するかということなのでしょうか?自分のMediaControllerをコーディングせずにMediaControllerオブジェクトのタップ面を変更する方法は?

private static final int ELAPSED_TIME = 2000; 
private boolean visible; 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    // onTap 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     // Supprime le callback pour cacher les contrôles s'il y en avait un en cours 
     hideHandler.removeCallbacks(onElapsedTime); 

     // Affiche les contrôles s'il n'était pas déjà affichés 
     if (!visible) { 
      header.setVisibility(View.VISIBLE); 
      controller.show(0); // 0 -> Visible jusqu'à ce que hide() soit appelé 
      visible = true; 
     } 
     else { 
      header.setVisibility(View.GONE); 
      controller.hide(); 
      visible = false; 
     } 

     // Défini un runnable a exécuter après ELAPSED_TIME pour cacher le header et le contrôleur 
     hideHandler.postDelayed(onElapsedTime, ELAPSED_TIME); 
    } 

    return true; 
} 


private Runnable onElapsedTime = new Runnable() { 
    public void run() { 
     header.setVisibility(View.GONE); 
     controller.hide(); 
     visible = false; 
    } 
}; 
+0

[MediaController.java](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/android/widget/MediaController.java# MediaController)、&あなたがその動作を気に入らなければそれを修正し、あなたがやっていることで修正することはできません。目に見えるコントローラーはおそらくすべてのタッチイベントを消費するので、何らかの形でタッチ操作にフックする必要があります – zapl

+0

私はあなたが言ったことを試したがっていますが、それは良いアイデアだとは思わないので多くの依存関係が必要です。私はちょうどmediacontrollerと同時に非表示と表示するヘッダーを追加したいと思いますが、明らかにそれほど簡単ではありません。 – Fr4nz

+0

MediaController.javaは内部APIに依存しています。それで、すべての依存関係ファイルをインポートしようとする選択肢でもありません.WindowsController.makeNewWindow(mContext)を使わずにMediaControllerの「フローティングウィンドウ」機能を再作成する方法を見つける必要があります。 – MaximumGoat

答えて

1

まず、あなたのクラスを構築し、のMediaControllerを拡張:

これは私が欲しいものにに使用したコードです。さて、 "隠す"と "表示する"メソッドをオーバーライドして、やりたいことをやりなさい。そのシンプルな、私は同じことをやった。 hideメソッドでは、ヘッダの可視性をGoneまたはInvisibleとして設定できます(requiremnetsに依存します)。

関連する問題