我似乎无法找到一个侦听播放状态的事件。我最感兴趣的是play/pause
州。我使用的MediaController
有一个Play/Pause
按钮,但我有一个辅助按钮,它也控制着Play/Pause
。使用我的自定义按钮,我可以play/pause
,但如果我play/pause
使用MediaController
play/pause
按钮,我目前无法更改自定义{{1}上的图片按钮可以播放或暂停。
是否有我不知道的事件,所以我可以在播放/暂停期间做一些工作?
这是一个非常相似的问题:How to catch event when click pause/play button on MediaController
答案 0 :(得分:91)
如果您将MediaController
与VideoView
结合使用,则扩展后者并添加自己的监听器应该相对容易。
自定义VideoView将以最基本的形式显示:
public class CustomVideoView extends VideoView {
private PlayPauseListener mListener;
public CustomVideoView(Context context) {
super(context);
}
public CustomVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setPlayPauseListener(PlayPauseListener listener) {
mListener = listener;
}
@Override
public void pause() {
super.pause();
if (mListener != null) {
mListener.onPause();
}
}
@Override
public void start() {
super.start();
if (mListener != null) {
mListener.onPlay();
}
}
public static interface PlayPauseListener {
void onPlay();
void onPause();
}
}
使用它与使用常规VideoView
相同,唯一的区别是我们现在可以将自己的侦听器连接到它。
// Some other code above...
CustomVideoView cVideoView = (CustomVideoView) findViewById(R.id.custom_videoview);
cVideoView.setPlayPauseListener(new CustomVideoView.PlayPauseListener() {
@Override
public void onPlay() {
System.out.println("Play!");
}
@Override
public void onPause() {
System.out.println("Pause!");
}
});
cVideoView.setMediaController(new MediaController(this));
cVideoView.setVideoURI(...);
// or
cVideoView.setVideoPath(...);
// Some other code below...
最后,您也可以在xml布局中声明它并对其进行充气(如上所示) - 只需确保使用<package_name>.CustomVideoView
即可。例如:
<mh.so.CustomVideoView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/custom_videoview" />
答案 1 :(得分:2)
您应该可以设置自己的MediaController.MediaPlayerControl并覆盖暂停并开始