我使用VideoView播放視頻文件。我正在使用seekTo功能來播放已停播的視頻。但是,當查找操作完成時,我想做一些操作。爲此,我需要使用onSeekCompleteListener;但是,VideoSelect不支持onSeekCompleteListener;它可以與MediaPlayer一起使用。我的問題是「有什麼方法可以使用onSeekCompleteListener」與VideoView?安卓:onSeekCompleteListener與VideoView
非常感謝
我使用VideoView播放視頻文件。我正在使用seekTo功能來播放已停播的視頻。但是,當查找操作完成時,我想做一些操作。爲此,我需要使用onSeekCompleteListener;但是,VideoSelect不支持onSeekCompleteListener;它可以與MediaPlayer一起使用。我的問題是「有什麼方法可以使用onSeekCompleteListener」與VideoView?安卓:onSeekCompleteListener與VideoView
非常感謝
public class ObservableVideoView extends VideoView
{
private IVideoViewActionListener mVideoViewListener;
private boolean mIsOnPauseMode = false;
public interface IVideoViewActionListener
{
void onPause();
void onResume();
void onTimeBarSeekChanged(int currentTime);
}
public void setVideoViewListener(IVideoViewActionListener listener)
{
mVideoViewListener = listener;
}
@Override
public void pause()
{
super.pause();
if (mVideoViewListener != null)
{
mVideoViewListener.onPause();
}
mIsOnPauseMode = true;
}
@Override
public void start()
{
super.start();
if (mIsOnPauseMode)
{
if (mVideoViewListener != null)
{
mVideoViewListener.onResume();
}
mIsOnPauseMode = false;
}
}
@Override
public void seekTo(int msec)
{
super.seekTo(msec);
if (mVideoViewListener != null)
{
mVideoViewListener.onTimeBarSeekChanged(msec);
}
}
public ObservableVideoView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public ObservableVideoView(Context context)
{
super(context);
}
public ObservableVideoView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
}
可以偵聽這樣的事件:
public class VideoPlayerActivity extends Activity
{
public static final String VIDEO_URL = "VideoUrl";
private String path = "";
private ObservableVideoView mVideoView;
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.video_player_activity_layout);
mVideoView = (ObservableVideoView) findViewById(R.id.videoView1);
mVideoView.setMediaController(new MediaController(this));
mVideoView.setVideoViewListener(mVideoViewListener);
path = getIntent().getStringExtra(VIDEO_URL);
if (path == "")
{
Toast.makeText(this, "Please edit VideoViewDemo Activity, and set path" + " variable to your media file URL/path", Toast.LENGTH_LONG)
.show();
}
else
{
mVideoView.setVideoPath(path);
mVideoView.requestFocus();
mVideoView.start();
}
}
private IVideoViewActionListener mVideoViewListener = new IVideoViewActionListener()
{
@Override
public void onTimeBarSeekChanged(int currentTime)
{
//TODO what you want
}
@Override
public void onResume()
{
//TODO what you want
}
@Override
public void onPause()
{
//TODO what you want
}
};
}
爾漢,你是正確的,onSeekCompleteListener不VideoView支持。
但是你可以複製和本地定製VideoView類將自己添加這種支持。
我展示瞭如何在my answer to 7990784做到這一點。
沒有必要創建一個自定義VideoView
。
您可以從VideoView
的onPrepared
方法訪問MediaPlayer
,然後設置OnSeekCompleteListener
,就像這樣:
mVideoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
//TODO: Your code here
}
});
}
});
我有同樣的問題,如果你有解決你的問題 - 我會很高興到這裏是什麼答案.. –
不幸的是,onSeekCompleteListener不能用於VideoView。我也不明白爲什麼這不支持VideoView,如果它支持seekTo操作。此處的解決方案是使用MediaPlayer而不是VideoView,因爲onSeekCompleteListener可用於MediaPlayer。您可以使用MediaPlayer而不是VideoView獲得相同的功能。希望這可以幫助你.. – Farhan
感謝您的回答,但 - 我不得不說,我發現更好,更簡單的解決方案,因爲我正在寫回答您的原始問題。看看我的自定義類擴展VideoView –