我有一个列表视图,点击列表视图中的项目后会打开一个新活动。新活动的xml如下:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/youtube_layout"></RelativeLayout>
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="match_parent" />
<WebView
android:id="@+id/webView1"
android:layout_below="@+id/rel"
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="match_parent"
/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/relativeLayout"
android:layout_alignParentBottom="true">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnPrev"
android:text="Previous Module"
android:onClick="prev"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnNext"
android:text="Next Module"
android:onClick="next"
/>
</RelativeLayout>
取决于我发送的项目类型,它会打开活动。例如。如果我将项目名称作为视频发送,则会在活动中打开视频。单击下一个项目,它将显示列表的下一个项目。按下前一个按钮,它显示上一个项目。
我的问题是,当我点击列表中的视频项目时,它会显示我的视频。这工作正常。但是当我打开其他项目时说webview,并且点击下一个/上一个按钮后不播放视频。如果我放入日志,我可以看到表面视图已经创建,然后进入表面更改,它立即销毁并转到mediaplayer setOnCompletionListener。
public void call(){
webView.setVisibility(View.GONE);
surfaceView.setVisibility(View.VISIBLE);
youtube_layout.setVisibility(View.GONE);
surfaceHolder=surfaceView.getHolder();
surfaceHolder.addCallback(this);
setController();
pd=new ProgressDialog(this);
pd.setMessage("Streaming...");
pd.setIndeterminate(false);
pd.setCancelable(true);}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
//pd.dismiss();
Log.d("mlearning", "surfaceChanged");
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.d("mlearning", "surfaceDestroyed");
}
private void setController(){
controller = new MediaController(this);
controller.setPrevNextListeners(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}, new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
controller.setMediaPlayer(this);
controller.setAnchorView(findViewById(R.id.surfaceView));
controller.setSaveEnabled(true);
controller.setEnabled(true);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
pd.show();
try{
mediaPlayer=new MediaPlayer();
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.setDataSource(url);//Url of the video
mediaPlayer.setDisplay(holder);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (isPaused) {
mediaPlayer.start();
mediaPlayer.seekTo(length);
isPaused = false;
pd.dismiss();
} else {
mediaPlayer.start();
controller.show();
pd.dismiss();
}
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {}}
答案 0 :(得分:0)
您可以在视图上动态添加曲面视图。
示例:layout.xml
<FrameLayout
android:id="@+id/fragment_file_videoplayer_surface_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</FrameLayout>
MainActivity.java
FrameLayout fl_surfaceview_container = (FrameLayout)findViewById(R.id.fragment_file_videoplayer_surface_container);
//Add surfaceView on Framelayout
SurfaceView videoSurface = new SurfaceView(getActivity());
fl_surfaceview_container.addView(videoSurface);
//if remove or destroy surfaceview
fl_surfaceview_container.removeAllViews();