我正在使用VideoView和搜索栏,但当我通过seekBar搜索所需位置时,它从开始播放视频.
我尝试这段代码:
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
mVideoView.seekTo(progress);
}
Mat*_*sne 25
VideoView没有,OnSeekCompleteListener()但你可以MediaPlayer从onPrepared方法中访问VideoView然后设置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
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
的呼叫VideoView.seekTo()是对的包装MediaPlayer.seekTo()。即使仍在执行实际搜索,该函数几乎立即返回。因此,您要等待通过寻求完成MediaPlayer.OnSeekCompleteListener。
但是,正如Reno所说,该标准VideoView不支持OnSeekCompleteListener。
但是您可以复制并在本地自定义VideoView类,以自己添加此支持。
首先,从VideoView.java的副本开始。或者,您可以克隆整个框架/基础存储库,但警告它下载的数据超过1 gig。
将VideoView.java复制到您的Eclipse Android项目中,它将开始构建但失败。这是我进行编译的方法:
MetaData。解决方法在我的待办事项清单上。这些需要替换为对的调用MediaMetadataRetriever。mContext为对getBaseContext()现在您可以为添加代码了OnSeekCompleteListener。该实现类似于其他侦听器,即OnCompletionListener。
public class VideoView extends SurfaceView
implements MediaPlayerControl {
// The client's listener which is the notification callback.
private OnSeekCompleteListener mOnSeekCompleteListener;
// Set up MediaPlayer to forward notifications to client.
private MediaPlayer.OnSeekCompleteListener mSeekCompleteListener =
new MediaPlayer.OnSeekCompleteListener() {
public void onSeekComplete(MediaPlayer mp) {
if (mOnCompletionListener != null) {
mOnCompletionListener.onCompletion(mMediaPlayer);
}
}
};
// API for client to set their listener.
public void setOnSeekCompleteListener(OnSeekCompleteListener l)
{
mOnSeekCompleteListener = l;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,更新您自己的代码:
android.widget.VideoView使用您的自定义VideoView。setOnSeekCompleteListener()。现在,当搜寻真正完成时,您的代码会收到通知,然后可以执行后续搜寻。
| 归档时间: |
|
| 查看次数: |
10827 次 |
| 最近记录: |