19
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidその2Advent Calendar 2016

Day 14

MediaControllerをカスタマイズする(のを諦めてライブラリ作った)

Posted at

MediaControllerとは

MediaController とは、再生・早送り・シークといった、音楽や動画の基本的な制御を行うことのできるViewです。

MediaPlayerやVideoViewと連携して使うことができます。
ExoPlayerの1.x時代のサンプルアプリの中でも使われていました。

こういうやつです。
basic.png

※Android SDK上にはandroid.widget.MediaControllerandroid.session.MediaControllerとで
2つあってややこしいのですが、今回触れるのは前者の方です。(後者はsupportもあるのでなおややこしい)

MediaControllerの仕様と問題点

MediaControllerの仕様は以下のようになっています。

  • 早送りボタンを押すと15秒移動
  • 早戻しボタンは5秒移動
  • 表示されてから3秒経つと自動で強制非表示
  • ボタン画像はSDK同梱の古いもので固定
  • 時間表示部分のテキストの色が絶妙(端末によっては視認できない)

しかしながら、これらの値は変更できるようになっていません。

あまりに使いづらいため誰も使ってないと思いきや、
StackOverFlow で検索すると最近でも結構悲鳴が上がっている ので、
「機能としてはMediaControllerで十分だけど、数値の変更やViewの調整だけはしたい」という需要はあるんじゃないかと思いました。

ライブラリ作りました

というわけでPlayerControlViewというライブラリを作りました。

前述した問題を解消できるように、基本機能はMediaControllerのままで書き直しました。
一例ですが、見た目の変更すると以下の感じになります。

custom.png

基本的な使い方

PlayerControlViewではMediaController.MediaPlayerControlをプレイヤーとして使うようにしています。

PlayerControlView playerControlView = new PlayerControlView(this);
playerControlView.attach(this);
playerControlView.setPlayer(/* mediaPlayerControl */);

MediaControllerでは以下のように書くので、なるべく移行しやすいように計らいました。

MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(/* view */);
mediaController.setMediaPlayer(/* mediaPlayerControl */);

ExoPlayer1.xではMediaPlayerControlをラップしたPlayerControlというクラスがあるため、それを使うことでプレイヤーとして利用できます。
Javadocでnot require this class.と書かれてますけど使わせてもらいました。

カスタマイズ方法についてはGitHubのREADMEやサンプルを見ていただけたらと思います。

ターゲット

  • MediaPlayer
  • VideoView
  • ExoPlayer1.x

現状この3つのプレイヤーはサポートしています。
今からちゃんと音楽や動画をやるならExoPlayer2を使うことになると思いますが、
カジュアルにやるならまだ彼らはまだ活躍するでしょうし、
カジュアルだからこそプレイヤーの見た目は用意されたやつでいいってこともあるんじゃないでしょうか。
(LINEの動画再生部分はほぼMediaControllerですし…)
そんな中でMediaControllerじゃアカンというときには、この記事のことを思い出していただけたらと思います。

これ以上のレイアウト変更や機能の追加をしたい場合は独自で作りましょう。

ちなみにExoPlayer2ではPlaybackControlViewというMediaControllerのような見た目のViewが使えるようになりましたが、ExoPlayer2そのものに依存しているため他のプレイヤーでは使えません。
尚、PlaybackControlViewの方はViewの変更はできませんが、早送りなどの時間の変更は可能です。

おわりに

この記事の内容は2016年の6月に行われた kyobashi.dexLTしたものですが、ライブラリの公開まではしてない状態でした。
あれから色々ありましたが2016年中に公開できてよかったです。(小並感)

現場からは以上です。

19
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?