我最初隐藏了VideoView
,当视频加载时,我显示了VideoView
。但是,如果VideoView
最初为invisible
,则永远不会调用onPrepared
。但是,如果VideoView
可见,则可以正确调用onPrepared
。有没有办法在加载视频之前隐藏videoView
。任何帮助都将不胜感激。谢谢!
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<VideoView
android:id="@+id/video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:visibility="invisible" />
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
VideoView videoView = (VideoView) findViewById(R.id.video);
Uri videoUri = Uri.parse(url);
videoView.setVideoURI(videoUri);
videoView.requestFocus();
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Toast.makeText(mActivity, "on prepared", Toast.LENGTH_SHORT).show();
videoView.setVisibility(View.VISIBLE);
}
});
}
发布于 2014-02-12 22:58:28
您可以尝试将视频视图的alpha通道设置为0或接近0。
发布于 2015-07-30 21:16:02
解决了使其布局不可见而不是videoView本身的问题。感谢@J.Kowalski。
布局:
<FrameLayout
android:id="@+id/layout_video_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:scrollbars="none"/>
</FrameLayout>
<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"
/>
设置OnPreparedListener:
videoView.setOnPreparedListener(this);
在就绪前显示进度条:
@Override
public void showProgress() {
progress.setVisibility(View.VISIBLE);
layoutVideoView.setVisibility(View.INVISIBLE);
}
加载视频URI:
@Override
public void loadVideo(Uri uri) {
videoView.setVideoURI(uri);
}
准备就绪后,将调用onPrepared:
@Override
public void onPrepared(MediaPlayer mp) {
Log.d("debug", "onPrepared");
iStepPreviewPresenter.onVideoViewReady();
}
最后显示布局并开始视频:
@Override
public void hideProgress() {
progress.setVisibility(View.INVISIBLE);
layoutVideoView.setVisibility(View.VISIBLE);
}
@Override
public void startVideo() {
videoView.start();
}
成功了!
发布于 2018-05-26 21:15:52
一种更简单的解决方法:
只需为videoview
添加一个虚拟parentview
,并为该parentview
设置visiblity
,而不是更改videoview
本身的visibility
。
https://stackoverflow.com/questions/21333141
复制相似问题