2011-06-30 13 views
6

以下のアクティビティは正常に機能しますが、画面上をクリックした場合にのみmediaControllerが表示されます。もう1つの問題は、メディアコントローラーの表示が3秒間だけであることです。この問題を解決するにはどうすればよいですか?Androidメディアコントローラで短時間の表示が表示される

public class PlayingActivity extends Activity 
{ 

    private VideoView mVideoView; 
    private EditText mPath; 
    MediaController mediaController; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.playingactivity); 
     mPath = (EditText) findViewById(R.id.path); 
     mPath.setText(GlobalVariable.getstrEmail()); 
     mVideoView = (VideoView) findViewById(R.id.surface_view); 
     Uri uri = Uri.parse("/sdcard/download/test.mp3"); 
     mediaController = new MediaController(this); 
     mediaController.findFocus(); 
     mediaController.setEnabled(true); 
     mediaController.show(0); 
     mediaController.setAnchorView(mVideoView); 
     mVideoView.setMediaController(mediaController); 
     mVideoView.setVideoURI(uri); 
     mVideoView.start(); 
    } 
} 
+0

どのような結果が欲しいですか? mediaControllerは常に画面に表示されますか? – Judy

+0

はい私はそれがいつもmp3ファイルの完成までしたいです – Android

+0

Androidからのノートがあります開発者:public void show(int timeout)アンドロイド1.5で "show(0)"を正常に使うことができました。私はアンドロイド2.3でそれを試して、結果はあなたと同じです。私はこの事件を理解していない。おそらく、mp3の長さをmediaControllerタイムアウトに設定することができます。 コントローラを画面に表示します。 「タイムアウト」ミリ秒の非アクティブ時間が経過すると自動的に消えます。 パラメータ タイムアウト\tミリ秒単位のタイムアウト。 hide()が呼び出されるまで0を使用してコントローラを表示します。 – Judy

答えて

18
mediaController.requestFocus(); 

それはできるだけ早く(クリックを必要とせずに)ビデオ開始

mVideoView.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mediaController.show(0); 
      } 
     }); 

が画面上にそれを維持するとして表示されるようにします。 希望することができます

1

Neoの提案は完璧です。しかし、私はonPrepared(MediaPlayer mp)メソッドに "mp.start()"を追加したい。そうしないと、メディアファイルの再生が開始されない。

0

ショーの方法でフォーカスを要求するか0を指定することは決して私のためには役に立たなかった。

問題は、MediaControllerクラスのデフォルトタイムアウトが3000msまたは3secです。そのshow()メソッドは、指定されたパラメータをデフォルトのパラメータに置き換えます。 Googleでテストされていないコードの結果である愚かなバグ。

デフォルト値を希望の値に置き換えるという厄介な回避策を実装する必要があります。

次のコードを試してください。それは動作するはずです。

mediaControls = new MediaController(getActivity()){ 
     @Override 
     public void show (int timeout){ 
      if(timeout == 3000) timeout = 20000; //Set to desired number 
      super.show(timeout); 
     } 
    }; 
mVideoView.setMediaController(mediaControls); 
0

のMediaControllerに2つの主要な問題があります。

  1. 自動的に隠すには、ビデオ番組をタップデフォルトで3秒
  2. は/最初の部分のための制御棒

を隠していますこれは固定的にstartのデフォルトのタイムアウト値をゼロに変更しています(ゼロは不定で、ビデオの開始時に内部的に使用されます)

mediaController = new MediaController(this){ 
      @Override 
      public void show() { 
       super.show(0);//Default no auto hide timeout 
      } 
    }; 

第2の問題は、クリックハンドラがプライベートで最終的なものであると宣言されているため、少し難解です。

:視界がそうのようにfalseに設定されている場合にも標準機能を再度有効にするには、変数を追加することができます

mediaController = new MediaController(this){ 

      @Override 
      public void show() { 
       super.show(0);//Default no auto hide timeout 
      } 
      @Override 
      public void hide() { 
        //DOES NOTHING 
      } 

      void setVisible(boolean visible){//USE THIS FUNCTION INSTEAD 
       if(visible) 
        super.show(); 
       else 
        super.hide(); 
      } 
    }; 

: 私のソリューションは、可視性を設定し、このような非表示機能を無効にするには、別の関数を使用することです

mediaController = new MediaController(this){ 
       private boolean forceVisible=false; 

       @Override 
       public void show() { 
        super.show(0);//Default no auto hide timeout 
       } 
       @Override 
       public void hide() { 
        if(!forceVisible)super.hide(); 
       } 

       void setVisible(boolean visible){ 
        forceVisible=visible; 
        if(visible) 
         super.show(); 
        else 
         super.hide(); 
       } 
     }; 
関連する問題