2013-03-09 188 views
7

ビデオを再生するボタン(ビデオビューで再生)と同じビューの中央に表示することができます。 MediaControllerクラスを使用してビデオを開始したら、一時停止、巻き戻し、早送り操作を実行するので、ボタンをクリックするとボタンが消えてしまいます。AndroidのVideoViewで再生ボタンを表示/非表示にする

どうすればよいですか?

は、ここで私がこれまで持っていレイアウトです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

<FrameLayout 
    android:id="@+id/video_frame" 
    android:layout_width="fill_parent" 
    android:layout_height="480px" 
    android:background="#000" 
    > 

    <VideoView 
    android:id="@+id/video_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

</FrameLayout> 

は、私は、プログラムでframeLayoutへのImageButtonを追加しようとしたが、それは動作するようには思えません。

+0

私はこれを正しく理解していれば、あなたはVideoView内部のボタンを配置しようとしていると描画可能に整列する重力定数を使用できますか? – crazylpfan

+0

VideoViewの内部ではそれほど多くはありません。 –

答えて

9

OK:このような何かを試してみたり。レイアウトファイルはかなり簡単です。あなたがレイアウトでそれらを定義するために、互いの上に

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

<FrameLayout 
    android:id="@+id/video_frame" 
    android:layout_width="fill_parent" 
    android:layout_height="480px" 
    android:background="#000" 
    > 

    <VideoView 
    android:id="@+id/video_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

    <ImageButton 
    android:id="@+id/play_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical|center_horizontal" 
    android:src="@drawable/ic_launcher" 
    /> 

</FrameLayout> 

でframeLayoutビュー要素層その子要素:ちょうど後VideoView要素をのImageButton を追加します。レイアウトに最後に追加された要素が上に描画されます。 ImageButtonには次の属性があります。

android:layout_gravity="center_vertical|center_horizontal" 

この属性は、ImageButtonをFrameLayoutの中央に配置します。

次のトリックは、ImageButtonをクリックした後に消えるようにすることです。これを行うにはのImageButtonにsetVisibility()メソッドを使用します。

// Setup a play button to start the video 
    mPlayButton = (ImageButton) findViewById(R.id.play_button); 
    mPlayButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (mPlayer.isPlaying()) { 
       resetPlayer(); 
      } else { 
       playVideo(videoUrl, mVideoView.getHolder()); 
       // show the media controls 
       mController.show(); 
       // hide button once playback starts 
       mPlayButton.setVisibility(View.GONE); 
      } 
     } 
    }); 
0

ボタンを使用する代わりに、FrameLayoutをClickableにしてみてください。

また、FrameLayoutの下にButtonを配置し、onClickイベントハンドラでViewの可視性をGONEに設定することもできます。

編集:ここで私はこれを解決する方法だ、https://stackoverflow.com/a/7511535/826731

+0

提案していただきありがとうございます!フレームをクリック可能にすることを検討しましたが、FrameLayoutが実行可能であることをユーザーに示す必要がありました。だから私はまだVideoViewの上に何かを描く必要があった。なぜボタンではないのですか? setVisibility()をView.GONEに呼び出すことについて正しいです。私の自己答えを見てください。 –

-1

フォアグラウンドDrawableのと呼ばれるFrameLayoutのあまり知られていない機能があります。すべてのFrameLayoutの子のうち、の上にレンダリングされるドロアブルを指定することができます。したがって:

mFrameLayout.setForegroundDrawable(mPlayDrawable); 

あなたのレイアウトはより効率的です(少ないビュー)。

あなたが適切に

mFrameLayout.setForegroundGravity(Gravity.XXXX) 
関連する問題