MediaController自定义
时间: 2023-07-26 08:15:05 浏览: 191
Android中的MediaController是一个UI组件,可以控制视频播放的进度、音量等,同时也可以自定义它的外观和行为。下面是自定义MediaController的步骤:
1. 创建新的布局文件
在res/layout目录下创建一个新的布局文件(例如:custom_media_controller.xml),用来定义你自己的MediaController的布局。
2. 定义MediaController的布局
在布局文件中定义MediaController的布局,可以使用各种布局控件,如Button、SeekBar等。
```
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageButton
android:id="@+id/media_controller_play_pause_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_play_arrow_black_24dp"/>
<SeekBar
android:id="@+id/media_controller_seek_bar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:id="@+id/media_controller_time_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00:00"/>
</LinearLayout>
```
以上代码创建了一个水平方向的LinearLayout,包含一个播放/暂停按钮、一个SeekBar和一个显示时间的TextView。
3. 创建自定义MediaController类
创建一个新的Java类,继承自MediaController类,用于加载自定义的布局和处理控件的事件。
```
public class CustomMediaController extends MediaController {
private ImageButton playPauseButton;
private SeekBar seekBar;
private TextView timeTextView;
public CustomMediaController(Context context) {
super(context);
}
@Override
public void setAnchorView(View view) {
super.setAnchorView(view);
// 加载自定义布局
View customView = LayoutInflater.from(getContext()).inflate(R.layout.custom_media_controller, null);
addView(customView);
// 初始化控件
playPauseButton = (ImageButton) customView.findViewById(R.id.media_controller_play_pause_button);
seekBar = (SeekBar) customView.findViewById(R.id.media_controller_seek_bar);
timeTextView = (TextView) customView.findViewById(R.id.media_controller_time_text);
// 处理控件的事件
playPauseButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isPlaying()) {
pause();
playPauseButton.setImageResource(R.drawable.ic_play_arrow_black_24dp);
} else {
start();
playPauseButton.setImageResource(R.drawable.ic_pause_black_24dp);
}
}
});
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// do nothing
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// do nothing
}
});
}
@Override
public void show() {
super.show();
// 更新SeekBar的进度和时间
seekBar.setMax(getDuration());
seekBar.setProgress(getCurrentPosition());
timeTextView.setText(formatTime(getCurrentPosition()) + " / " + formatTime(getDuration()));
}
@Override
public void hide() {
super.hide();
}
private String formatTime(int time) {
int seconds = time / 1000;
int minutes = seconds / 60;
int remainingSeconds = seconds % 60;
return String.format("%02d:%02d", minutes, remainingSeconds);
}
}
```
4. 使用自定义MediaController
使用自定义的MediaController只需要将其设置给VideoView即可。
```
VideoView videoView = (VideoView) findViewById(R.id.videoView);
CustomMediaController mediaController = new CustomMediaController(this);
videoView.setMediaController(mediaController);
mediaController.setAnchorView(videoView);
```
阅读全文