android:onSeekCompleteListener和VideoView
我正在使用VideoView播放视频文件。我正在使用seekTo功能,以便从停止播放的位置播放视频。但是,我想在seek操作完成后执行一些操作。为此,我需要使用onSeekCompleteListener;但是,视频视图不支持onSeekCompleteListener;它可以与MediaPlayer一起使用。我的问题是“有没有什么方法可以让我在VideoView中使用onSeekCompleteListener?” 非常感谢android:onSeekCompleteListener和VideoView,android,android-videoview,seek,Android,Android Videoview,Seek,我正在使用VideoView播放视频文件。我正在使用seekTo功能,以便从停止播放的位置播放视频。但是,我想在seek操作完成后执行一些操作。为此,我需要使用onSeekCompleteListener;但是,视频视图不支持onSeekCompleteListener;它可以与MediaPlayer一起使用。我的问题是“有没有什么方法可以让我在VideoView中使用onSeekCompleteListener?” 非常感谢 public class ObservableVideoView e
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
}
};
}Farhan,你是对的,onSeekCompleteListener不受VideoView支持 但是,您可以复制和本地自定义VideoView类,以便自己添加此支持
我将在中演示如何执行此操作。无需创建自定义的
视频视图
您可以通过VideoView
的onPrepared
方法访问MediaPlayer
,然后在seekCompleteListener上设置,如下所示:
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获得相同的功能。希望这能帮助你…谢谢你的回答,但是-我不得不说我找到了更好更简单的解决方案,因为我写的是你最初问题的答案。看一看我的自定义类,它扩展了VideoView请将其标记为您问题的解决方案。我真的认为我的解决方案对您的原始问题很有好处。tal:您的新API onTimeBarSeekChanged在语义上与onSeekCompleteListener.onSeekComplete不同,因此可能无法满足Farhan的要求。seekTo函数启动低级搜索,onSeekComplete用于在低级搜索完成时通知客户端。onTimeBarSeekChanged仅通知已调用seekTo未完成。对我无效。使用videoView.seekTo()后,未发现任何事件triggered@Gibberish请发一些代码,我们可以帮你我设法弄明白了。这是可行的,但对我的情况没有帮助。根据视频编码的不同,您无法在想要的位置搜索,例如h.264