Mat*_*adt 14 android android-asynctask android-mediaplayer android-videoview
我有一个AsyncTask,我可以隐藏视频视图,开始视频播放,并在视频播放时显示视频视图.
但是当视频视图设置为不可见时,视频才会启动,异步任务会一直挂在onBackground上.如果我注释掉这一行,视频就会开始播放.为什么视频视图需要可见表面?
public void walk(final View v) {
new AsyncTask() {
@Override
protected void onPreExecute() {
super.onPreExecute();
mVideoView.setVisibility(View.INVISIBLE); // this line causes video not to start
mVideoView.start();
}
@Override
protected Object doInBackground(Object... objects) {
while (!mVideoView.isPlaying()) {}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
mVideoView.setVisibility(View.VISIBLE);
}
}.execute();
Run Code Online (Sandbox Code Playgroud)
为什么我这样做有一些背景知识:我试图避免在启动视频时常见的黑色闪光问题:
https://stackoverflow.com/search?q=%5Bandroid%5D+videoview+black
https://stackoverflow.com/search?q=%5Bandroid%5D+video+%5Bmediaplayer%5D+black
ant*_*nyt 10
这VideoView是一个专门的SurfaceView.SurfaceView的工作原理是在普通窗口后面创建另一个窗口(包含所有视图),然后具有透明区域,以便可以在其后面看到新窗口(具有自己的绘图表面).
如果SurfaceView不再可见,则其表面将被销毁,即被SurfaceHolder.Callback.surfaceDestroyed调用.该VideoView不会尝试播放其视频,如果没有一个有效的表面,因此,您AsyncTask将能够永远不会离开doInBackground.
当SurfaceView的窗口可见时,将为您创建Surface; 你应该实现surfaceCreated(SurfaceHolder)和surfaceDestroyed(SurfaceHolder)来发现当窗口被显示和隐藏时创建和销毁Surface的时间.
| 归档时间: |
|
| 查看次数: |
4142 次 |
| 最近记录: |